用bash向不带扩展名的文件添加文件扩展名“ .jpg”的好方法是什么?
Answers:
for f in *.jpg; do mv "$f" "${f%.jpg}"; done
for f in *; do mv "$f" "$f.jpg"; done
"${f%.jpg}"
bash shell字符串操作一样。`$ {string%substring}`从$ string的后面删除$ substring的最短匹配项。
.jpg
甚至会添加到普通文件中。
您可以使用重命名:
rename 's/(.*)/$1.jpg/' *
rename from to file...
另一种方式-无循环
find . -type f -not -name "*.*" -print0 |\
xargs -0 file |\
grep 'JPEG image data' |\
sed 's/:.*//' |\
xargs -I % echo mv % %.jpg
分解:
上面的命令是空运行,在它之后,您应该在mv之前删除“ echo”
编辑 有人建议在这里需要“将路径参数用引号引起来;避免参数在带有空格的路径上分开”。
通常,此建议是正确的,在这种情况下不是。因为,这里的%
是得到了替换不通过壳膨胀,而是由xargs
内部(直接地),所以%
将即使在文件名空间中正确地被取代。
简单的演示:
$ mkdir xargstest
$ cd xargstest
# create two files with spaces in names
$ touch 'a b' 'c d'
$ find . -type f -print
./c d
./a b
# notice, here are spaces in the above paths
#the actual xargs mv WITHOUT quotes
$ find . -type f -print | xargs -I % mv % %.ext
$ find . -type f -print
./a b.ext
./c d.ext
# the result is correct even in case with spaces in the filenames...
rename --dry-run * -a ".jpg" # test
* -a ".jpg" # rename
--dry-run
并且-a
在我的的版本中不可用rename
。如果特定于某些体系结构,则应指定。
您可以使用移动多个文件。我是这个项目的维护者。语法很简单。
mmf files*
它将打开所有文件名或$ vim默认的$ EDITOR,您可以在vim中使用Ctrl + v + G突出显示所有文件名的末尾,保存文件,退出,所有文件都被重命名。
李瑞安
将文件扩展名添加到目录中多个没有文件扩展名的文件的正确语法是
find . | while read FILE; do if [[ -n `file --mime-type "$FILE" | grep 'message/rfc822'` ]]; then mv "$FILE" "$FILE".eml; fi; done;
mv "${file}" "${file}.jpg"
?