簡體   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