Bash
如何重命名多個目錄?
這是我的目錄:
P [001] P [002] P [003]
我想重命名為:
P001 P002 P003
我使用了程式碼:
for P in *\ *; do mv '$P' '${P// /_}'; done
但我錯過了一些東西。
嘗試
prename
$ ls P [001] P [002] P [003] $ prename 's/[ \[\]]//g' P\ * $ ls P001 P002 P003 $
'
或者,堅持使用您原來的腳本方法(對to稍作調整併對"
正則表達式稍作更改)$ ls P [001] P [002] P [003] $ for P in *\ *; do mv "$P" "${P//[\[\] ]/}" ; done $ ls P001 P002 P003 $
請注意目錄是否在彼此內部,換句話說,如果您以遞歸方式執行此操作,則上述答案均無效(也許
prename
有效,我不確定)。例如:P [1] |___P [10] |___P [11] |___P [112] |___other |___P [113] P [21] P [132]
您可以在不安裝任何軟體包的情況下使用它:
find . -type d -name 'P [*' -printf "echo mv \'%h/%f\' \'%h/\$(echo %f | sed \"s/[][ ]//g\")\'\n" | sort -r | sh
用於測試和做實際工作:
find . -type d -name 'P [*' -printf "mv \'%h/%f\' \'%h/\$(echo %f | sed "s/[][ ]//g\")\'" | sort -r | sh
說明:查看目前文件夾 (
find .
) 並找到-type d
名稱匹配 ( ) 的所有目錄 (- name 'P [*'
) 並列印將傳遞給sh
執行的命令。printf
用找到的文件的路徑和名稱替換 %h 和 %f。該部分$(echo %f | sed 's/[][ ]//g')
要求sed
命令將所有文件名 ( ) 中的(s/
) 括號和空格 ( [][
] )替換為空 ( )。重要的是在執行這些命令()之前對它們進行反向排序( ),否則您可能在重命名父文件夾之前重命名它的子文件夾並且命令失敗。//``g``| sort -r``| sh
希望它是有用的。
編輯:由於@AdminBee,修復了名稱中的空格問題