Linux
如何修剪多個目錄名稱的特定部分?
我在父目錄(/home/anik/“我的所有目錄”)中有 100 個目錄,其命名結構如下:
- Zt.isolate1.Spades
- Zt.isolate2.Spades
- Zt.isolate100.Spades
我想剪掉“Zt”。以及每個目錄名稱中的“.Spades”部分。
你能告訴我如何在一個循環中一次對所有目錄執行此操作嗎?謝謝你。
循環名稱並使用變數替換來刪除不需要的位。以下假設
$HOME
是/home/anik
並且這是您的文件所在的位置(topdir
如果文件位於其他位置,請更改為其他值):#!/bin/sh topdir=$HOME for dirpath in "$topdir"/Zt.*.Spades; do [ ! -d "$dirpath" ] && continue newdirpath=$topdir/${dirpath#$topdir/Zt.} newdirpath=${newdirpath%.Spades} if [ -e "$newdirpath" ]; then printf 'Can not rename "%s" into "%s", name taken\n' "$dirpath" "$newdirpath" else printf 'Renaming "%s" into "%s"\n' "$dirpath" "$newdirpath" echo mv "$dirpath" "$newdirpath" fi done
該表達式
$topdir/${dirpath#$topdir/Zt.}
將替換為目錄的路徑名,但Zt.
在目錄文件名的開頭沒有。它通過刪除前綴$topdir/Zt.
然後$topdir/
在開頭再次添加來做到這一點。表達式
${newdirpath%.Spades}
擴展為$newdirpath
但從值的末尾刪除字元串.Spades
。我
echo
在命令前面添加了mv
輸出將執行而不是執行的命令。測試程式碼,然後刪除echo
它是否正確。