例如我有以下文件:
./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 {} \;
這會在單引號中執行該命令,
$0
並Move
指派$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]