如何重新命名多個檔案名稱包括子資料夾?

如何重新命名多個檔案名稱包括子資料夾?

例如我有以下文件:

./dirA/fileA.png
./dirA/fileB.png
./dirA/fileC.png
./dirB/fileD.png
./dirB/fileE.png
./dirB/dirC/fileF.png

是否有任何一行命令或腳本可以將檔案名稱重命名為以下內容?

./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB/[email protected]
./dirB/[email protected]
./dirB/dirC/[email protected]

答案1

嘗試:

find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;
  • find .

    這將啟動目前目錄的檔案搜尋。

  • -type f

    這將搜尋限制為常規文件。

  • -name '*.png'

    這將搜尋限制為名稱以.png.

  • -execdir bash -c '...' Move {} \;

    這會在單引號中執行該命令,$0Move指派$1給已找到的檔案的名稱。在我們的例子中,單引號中的命令是:

  • mv "$1" "${1%.png}@2x.png"

    這會將文件重命名為以@2x.png.該構造從檔案名稱末尾${1%.png}刪除。.png因此,將檔案名稱末尾的${1%.png}@2x.png替換為..png@2x.png

例子

讓我們從包含這些檔案的目錄開始:

$ find .
.
./dirA
./dirA/fileA.png
./dirA/fileC.png
./dirA/fileB.png
./dirB
./dirB/fileE.png
./dirB/dirC
./dirB/dirC/fileF.png
./dirB/fileD.png

現在,讓我們運行我們的命令:

$ find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;

命令執行後,我們現在有了這些檔案:

$ find .
.
./dirA
./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB
./dirB/dirC
./dirB/dirC/[email protected]
./dirB/[email protected]
./dirB/[email protected]

相關內容