Filenames

刪除最後一個下劃線後的字元串後使用 sed 命令重命名多個文件

  • December 6, 2018

我在一個目錄中有一組文件,如下所示,我想在出現最後一個下劃線後刪除字元串。字元串可能每次都不同。如果可以用sed.

輸入文件:

com_101_00000_0001_a234.txt
com_101_retail_00000_0002_g345.ctl
com_101_lines_003_0002_1134.txt

結果文件名:

com_101_00000_0001.txt
com_101_retail_00000_0002.ctl
com_101_lines_00003_0002.txt

如果你的系統有 perl rename,你可以這樣做:

rename -n 's/_[^_]+?\././' *

如果您的文件可能以相同的名稱結束,為避免覆蓋它們,請使用-i

rename -in 's/_[^_]+?\././' *

如果這符合您的預期,請刪除-n以實際重命名文件。

如果你真的堅持要硬塞sed進去,你可以做一些不必要的複雜的事情,像這樣:

for f in *_*.*; do
   new=$(printf "%s\n" "$f" | sed 's/\(.*\)_[^_]*\(\.[^_]*\)$/\1\2/')
   echo mv "$f" "$new"
done

或者,沒有sed,更理智的:

for f in *_*.*; do echo mv "$f" "${f%_*}.${f##*.}" ; done

對於最後兩個範例,如果它們符合您的預期,請刪除echo以實際重命名文件。

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