我想更改某些类型文件的文件名。它应该递归运行。我几乎掌握了它,并且不知道如何使用参数{}(绝对路径)。
find $PWD -type f -name '*.jpg' -exec echo " {} " \;
例如,我想使用reg更改扩展名。表达式,而不是命令重命名等。有时我需要使用新名称将其传递给函数,因此重命名不适用于此处。应该可以使用参数$ each:
for each in /* do echo "${each\./\}.png" done
如何在参数{}上使用正则表达式,例如:“ $ {each \。/ \} .png”?
与basename
一起使用时,我发现了find
行为异常的解决方法:
find $PWD -type f -name '*.jpg' -exec sh -c 'echo "$(basename "$0" .jpg).png"' {} \;
sh
强制使用您的/bin/sh
文件解释以下命令。 -c
选项指定参数作为字符串传递(此处,参数$0
为{}
)。
如果有以下文件:
/home/username/image1.jpg
/home/username/Documents/image2.jpg
这将输出:
image1.png
image2.png
编辑
如果要保留完整路径,可以使用此:
find $PWD -type f -name '*.jpg' -exec sh -c 'echo "${0%%.jpg}".png' {} \;
这将输出:
/home/username/image1.png
/home/username/Documents/image2.png