ファイル名の点を下線で置き換えます(拡張子を除く)。

ファイル名の点を下線で置き換えます(拡張子を除く)。

誰かがファイルの名前を変更する方法を提案できますか?

head.body.date.txt

到着する:

head_body_date.txt

名前変更を行う一行文はありますか?Unix

ベストアンサー1

ファイル名を繰り返し、パラメータ拡張を使用して変換します。

for f in *.*.*.txt; do i="${f%.txt}"; echo mv -i -- "$f" "${i//./_}.txt"; done

パラメータ拡張モードでは、ファイル名の${f//./_}すべてのsを.s()に置き換えます。_$f

上記は実際の名前を変更するために練習を実行し、以下を削除しますecho

for f in *.*.*.txt; do i="${f%.txt}"; mv -i -- "$f" "${i//./_}.txt"; done

以下だけでなく、すべての拡張を処理したい場合.txt

for f in *.*.*.*; do pre="${f%.*}"; suf="${f##*.}"; \
                     echo mv -i -- "$f" "${pre//./_}.${suf}"; done

削除後の実際の動作確認echo

for f in *.*.*.*; do pre="${f%.*}"; suf="${f##*.}"; \
                     mv -i -- "$f" "${pre//./_}.${suf}"; done

通常、ポイント数に関係なく、少なくとも1つは次のようになります。

for f in *.*; do pre="${f%.*}"; suf="${f##*.}"; \
                 mv -i -- "$f" "${pre//./_}.${suf}"; done

おすすめ記事