以下のように、ディレクトリにファイルセットがあり、最後のアンダースコアが表示された後に文字列を削除したいと思います。文字列は毎回異なる場合があります。それでそうすることができれば本当に良いと思います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
答え1
システムに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
最後の2つの例では、予想と一致する場合は削除してecho
実際にファイル名を変更してください。