Linuxファイル名の短縮(切り捨て記号)

Linuxファイル名の短縮(切り捨て記号)

Linuxにファイルのリストがありますが、これを短くしたいと思います。その形式は WhatIWant_WhatIDoNotWant.txt です。

WhatIWant.txtのように簡単に作成する方法はありますか?次の質問(下のリンク)を見て、for doループが本当に好きですが(結果に重複がある場合に備えて)、アンダースコア(_)の位置値を取得して代わりに入力する方法がわかりません。 16文字をエンドポイントとして使用しています...

ファイル名を短縮するためのLinuxスクリプトまたはプログラム

ベストアンサー1

変数拡張は${varname%_*}(最後)から文字列の終わりまで_すべてを削除します。

例えば

$ name=WhatIWant_WhatIDontWant.txt
$ echo "${name%_*}"
WhatIWant

削除もできますので参考にしてください.txt

したがって、単純なループを作成できます。

for name in *.txt
do
  mv -i -- "$name" "${name%_*}.txt"
done

これを再帰的にしたい場合は、次のようになります。

find . -name '*.txt' | while read -r "name"
do
  mv -i "$name" "${name%_*}.txt"
done

十分かもしれませんが、ファイルに戻り文字が含まれている場合は注意してください。これによりサイクルが壊れる可能性があります。

おすすめ記事