recursion地向所有文件添加文件扩展名

我有几个目录和子目录包含没有文件扩展名的文件。 我想将.jpg添加到这些目录中包含的所有文件。 我已经看到改变文件扩展名的bash脚本,但不是只添加一个。 它也需要recursion,有人可以帮忙吗?

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

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

说明:recursion地从当前目录( . )开始查找所有文件( -type f ),并将移动命令( mv )应用到它们中的每一个。 还请注意{}周围的引号,以便具有空格的文件名(甚至是换行符)得到正确的处理。

这将find没有扩展名的文件,并添加您的.jpg

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

这有点晚了,但是我想我会补充说一个比迄今为止更好的解决scheme(尽pipe可能不太可读)可能是:

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

使用find | xargs find | xargs模式通常会导致更有效的执行,因为您不必为每个文件分叉新的进程。

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

喜欢这个,

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

我不希望你有空间分隔的文件名,
如果你这样做,名字将需要处理一下。

如果你想从其他目录执行命令,
你可以replacefind .find /target/directory

rename

不知道它可以重命名文件没有扩展名(我现在在Windows 7上)

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