Filenames
刪除最後一個下劃線後的字元串後使用 sed 命令重命名多個文件
我在一個目錄中有一組文件,如下所示,我想在出現最後一個下劃線後刪除字元串。字元串可能每次都不同。如果可以用
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
以實際重命名文件。