rob*_*lls 103 bash shell command-line file-extension file
我有一些目录和子目录包含没有文件扩展名的文件.我想添加.jpg到这些目录中包含的所有文件.我见过用于更改文件扩展名的bash脚本,但不是仅添加一个.它也需要递归,有人可以帮忙吗?
Ste*_*202 218
没有显式循环的替代命令(man find):
find . -type f -exec mv '{}' '{}'.jpg \;
Run Code Online (Sandbox Code Playgroud)
说明:以递归方式查找-type f从当前目录()开始的所有文件().,并将move命令(mv)应用于每个文件.还要注意引号{},以便正确处理带空格(甚至是换行符......)的文件名.
gho*_*g74 61
这将找到没有扩展名的文件并添加你的.jpg
find /path -type f -not -name "*.*" -exec mv "{}" "{}".jpg \;
Run Code Online (Sandbox Code Playgroud)
小智 9
这有点晚了,但我想我会补充一个比目前为止更好的解决方案(尽管可能性较差):
find /path -type f -not -name "*.*" -print0 | xargs -0 rename 's/(.)$/$1.jpg/'
Run Code Online (Sandbox Code Playgroud)
使用该find | xargs模式通常可以提高执行效率,因为您不必为每个文件分叉新进程.
请注意,这需要在Debian风格的发行版(也称为prename)中找到重命名版本,而不是传统的重命名.它只是一个很小的perl脚本,所以在任何系统上使用上面的命令都很容易.
像这样,
for f in $(find . -type f); do mv $f ${f}.jpg; done
Run Code Online (Sandbox Code Playgroud)
我不希望您有空格分隔的文件名,
如果您这样做,则需要对名称进行一些处理。
如果您想从其他目录执行命令,
可以find .将find /target/directory.