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

有帮助吗?

解决方案

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

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

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

其他提示

这会查找没有扩展名,并添加您的.JPG

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

这是有点晚了,但我想我要补充的是一个更好的解决方案(虽然也许少可读)比那些迄今为止可能是:

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

使用find | xargs图案通常导致更高效的执行,因为你不必一个新的进程为每个文件。

请注意,这需要在Debian中味发行版中发现的重命名的版本(又名女士prename),而不是传统的重命名。这只是一个很小的Perl脚本,虽然如此,这将是很容易使用上面的命令的任何系统上。

这样的,

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

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

如果您想从其他目录下执行命令,点击 可以用find .替换find /target/directory

有关重命名在Windows基本可以做ren * *.jpg没有扩展名的文件 由于文件没有扩展名,只需要用*,或者如果你想改变PNG为JPG 使用ren *.png *.jpg

rename

不知道,它可以在不扩展重命名文件(我对现在的Windows 7)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top