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

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

答え2

# We loop over the files with filename suffix .txt

for f in *.txt; do
    # We rename the file removing _ and the remaining part including the extension
    mv -- "$f" "${f/_*}.txt"
done

関連情報