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

问题描述 投票:2回答:1

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

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

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

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

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

regex linux find command exec
1个回答
2
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.