Shell

使用特定副檔名重命名目錄

  • June 29, 2018

我問的上一個問題的擴展: 重命名字母數字文件

我有一個目錄,其中包含副檔名為 *_upstream 的子目錄:

DHX30_vs_Control18.txt_events_without_u2af1_srsf2_altexons_upstream
GEMIN5_vs_Control19.txt_events_without_u2af1_srsf2_altexons_upstream

我想通過刪除第一個’_‘之後的所有內容來重命名它們,這樣它就變成了

DHX30
GEMIN5
for dir in ./*_*_upstream/
do 
 mv -- "$dir" "${dir%%_*}"
done

上面的循環選擇目前目錄中與模式匹配的每個目錄(尾部斜杠執行此操作):“(某事)下劃線(某事)下劃線上游”。然後,它通過使用參數擴展來重命名這些目錄以刪除最長的匹配項:“下劃線(任何東西)”,這會刪除第一個下劃線之後的所有內容。

例如:

設置:

mkdir DHX30_foo_upstream
mkdir GEMIN5_vs_Cblah_upstream
touch DX31_foo_upstream

結果:

$ tree
.
├── DHX30
├── DX31_foo_upstream
└── GEMIN5

2 directories, 1 file

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