递归地向所有文件添加文件扩展名

时间:2009-07-10 09:04:58

标签: bash file shell command-line file-extension

我有一些包含没有文件扩展名的文件的目录和子目录。我想将.jpg添加到这些目录中包含的所有文件中。我见过用于更改文件扩展名的bash脚本,但不是仅添加一个。它也需要递归,有人可以帮忙吗?

6 个答案:

答案 0 :(得分:211)

没有显式循环的替代命令(man find):

find . -type f -exec mv '{}' '{}'.jpg \;

说明:以递归方式查找从当前目录(-type f)开始的所有文件(.),并将移动命令(mv)应用于每个文件。另请注意{}周围的引号,以便正确处理带空格(甚至是换行符......)的文件名。

答案 1 :(得分:57)

这将找到没有扩展名的文件并添加你的.jpg

find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;

答案 2 :(得分:9)

这有点晚了,但我想我会补充一个比目前更好的解决方案(虽然可能不太可读):

find /path -type f -not -name "*.*" -print0 | xargs -0 rename 's/(.)$/$1.jpg/'

使用find | xargs模式通常可以提高执行效率,因为您不必为每个文件分叉新进程。

请注意,这需要在Debian风格的发行版(也称为prename)中找到重命名版本,而不是传统的重命名。它只是一个很小的perl脚本,所以在任何系统上使用上面的命令都很容易。

答案 3 :(得分:4)

像这样,

for f in $(find . -type f); do mv $f ${f}.jpg; done

我不希望你有空格分隔的文件名,
如果这样做,则需要稍微处理名称。

如果要从其他目录执行命令,
您可以将find .替换为find /target/directory

答案 4 :(得分:1)

要重命名Windows基础中没有扩展名的所有文件,您可以执行ren * *.jpg 由于文件没有扩展名,只需使用*,或者如果你想将png更改为jpg 使用ren *.png *.jpg

答案 5 :(得分:0)

rename

不确定它是否可以在没有扩展名的情况下重命名文件(我现在在Windows 7上)