120

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

4

6 回答 6

257

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

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

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

于 2009-07-10T09:14:52.427 回答
69

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

find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;
于 2009-07-10T09:27:03.027 回答
9

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

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

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

请注意,这需要在 Debian 风格的发行版中找到的 rename 版本(又名 prename),而不是传统的 rename。不过,这只是一个很小的 ​​perl 脚本,因此在任何系统上使用上面的命令都很容易。

于 2009-07-14T03:51:57.533 回答
4

像这样,

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

我不希望您有空格分隔的文件名,
如果这样做,则需要对名称进行一些处理。

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

于 2009-07-10T09:07:15.763 回答
1

要在 Windows basic 中重命名所有没有扩展名ren * *.jpg 的文件,你可以这样做因为文件没有扩展名,只需使用 *,或者如果你想将 png 更改为 jpg 使用ren *.png *.jpg

于 2015-11-08T17:25:54.553 回答
0

rename

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

于 2009-07-10T09:28:44.363 回答