Shell
使用特定副檔名重命名目錄
我問的上一個問題的擴展: 重命名字母數字文件
我有一個目錄,其中包含副檔名為 *_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