Directory
如何刪除多個目錄名稱的最後部分?
我有許多目錄的標題,例如“20150512_101129_3016”和其他帶有附加下劃線的附加字元串,例如“20150512_101129_3016_v1A”(它並不總是v1A,可能是v1或V1a等)。我想重命名所有目錄,以便刪除最後一個下劃線後面的最後一個字元串。我更喜歡一種解決方案,該解決方案旨在刪除(包括)最後/第三個下劃線之後的所有文本,因為我不確定所有目錄名稱在第三個下劃線之前的文本中是否具有相同數量的字元。
你可以用一個簡單的 shell 循環來做到這一點:
for x in ./*_*_*_*; do mv -i "$x" "${x%_*}"; done
即對於名稱至少包含三個下劃線的每個文件,重命名文件,剝離從最後一個下劃線開始的部分。
如果有衝突(例如兩者都
20150512_101129_3016_v1A
存在20150512_101129_3016_v1B
),則按字典順序的第一個文件被重命名為所需的目標,第二個文件被移動到子目錄,即20150512_101129_3016_v1B
在重20150512_101129_3016/20150512_101129_3016_v1B
命名20150512_101129_3016_v1A
為20150512_101129_3016
. 為避免這種情況,請添加額外的檢查:for x in ./*_*_*_*; do if [ -e "${x%_*}" ]; then echo "Not renaming $x because ${x%_*} already exists" continue fi mv "$x" "${x%_*}" done
或者,在 Linux 上,將
-T
選項傳遞mv
給以使其執行此檢查。