Linux

如何修剪多個目錄名稱的特定部分?

  • April 16, 2021

我在父目錄(/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它是否正確。

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