繁体   English   中英

如何在 Linux 中的 find 命令中对 {} 参数应用正则表达式

[英]How to apply regex on {} parameter in Linux in find command

我想更改某种类型文件的文件名。 它应该递归运行。 我几乎已经知道了,但不知道如何使用参数 {}(绝对路径)。

      find $PWD -type f -name '*.jpg' -exec echo " {} " \;

例如,我想使用 reg 更改扩展名。 表达式而不是命令重命名等。我有时需要新名称将其传递给函数,因此重命名在此处不适用。应该可以使用参数 $each 与 for-case 中的参数类似:

      for each in /* do echo "${each\./\}.png" done

如何在参数 {} 上应用正则表达式,例如:“${each \\ . / \\ }.png”?

我找到了一种解决方法,解决了将basenamefind一起使用时行为异常的方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM