Directory

如何刪除多個目錄名稱的最後部分?

  • August 16, 2016

我有許多目錄的標題,例如“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_v1A20150512_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給以使其執行此檢查。

引用自:https://unix.stackexchange.com/questions/303554