我想更改特定类型文件的文件名。它应该递归运行。 我几乎已经明白了,但不知道如何使用参数 {} (绝对路径)。
find $PWD -type f -name '*.jpg' -exec echo " {} " \;
例如,我想使用 reg. 更改扩展名。表达式而不是命令重命名等。我有时需要新名称将其传递给函数,因此重命名在这里不适用。应该可以像 for-case 中那样使用参数 $each:
for each in /* do echo "${each\./\}.png" done
如何在参数 {} 上应用正则表达式,如下所示:“${each\./\}.png”?
最佳答案
我发现了与 find
一起使用时 basename
行为异常的解决方法:
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
关于regex - 如何在 Linux 的 find 命令中对 {} 参数应用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23733126/