【问题标题】:How to apply regex on {} parameter in Linux in find command如何在 Linux 中的 find 命令中对 {} 参数应用正则表达式
【发布时间】:2014-07-07 03:22:30
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我已经调查了您的问题,但遇到了一些奇怪的问题。我尝试过类似find $PWD -type f -name '*.jpg' -exec basename {} .jpg \; 的方法,它返回的文件名不带扩展名。但是,当我尝试 find $PWD -type f -name '*.jpg' -exec echo $(basename {} .jpg).png \; 时,它就像我写了 echo {}.png 一样工作。

标签: regex linux find command exec


【解决方案1】:

我发现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

【讨论】:

  • 这个可能性以及上面的那个帮助了我!谢谢:)
  • @user3328286 很高兴我能帮上忙 :) 我这个答案很有用,别忘了接受它,这样它就可以结束你的问题了
  • 您是要投票吗?我想,但我还不能。只有 5 声望:)
  • @Alexito 不,投票上/下按钮旁边有一个叉号。点击它接受答案
猜你喜欢
  • 2015-08-27
  • 2015-12-20
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 2018-08-30
  • 2012-06-21
  • 2017-03-08
  • 1970-01-01
相关资源
最近更新 更多