bashスクリプトを使用してファイル名を一括変更するには?

bashスクリプトを使用してファイル名を一括変更するには?

ディレクトリには次の形式のファイルが複数あるので、すべてのファイルの名前を次のように変更したいと思います。

~から

27_07_2017file1vc001vpxd-1605.log
27_07_2017case2vc001vpxd-9169.log
27_07_2017server3vc001vpxd-4640.log
27_07_2017file24vc001vpxd-9170.log
27_07_2017files5vc001vpxd-4641.log

到着

file1vc001vpxd-1605_27_07_2017_1.log
case2vc001vpxd-9169_27_07_2017_1.log
server3vc001vpxd-4640_27_07_2017_1.log
file24vc001vpxd-9170_27_07_2017_1.log
files5vc001vp-4641_27_07_2017_1.log

ファイルの種類をdatefilename.log次から変更する必要があります。filename.date_1.log

rename私のLinuxサーバーでは機能しないので、コマンドを提案しないでください。

ありがとう

ベストアンサー1

これはbashスクリプトです(一般的な状況に合わせて修正OPの修正された質問に基づいています):

for file in ./*.log; do 
    echo mv "$file" "${file:12:$((${#file}-16))}_${file:2:10}_1.log";
done

上記は${file:X:Y}bashサブストリング拡張構文${variable:offset:length}で、次のようになります。長さ文字数オフセットそれvariable(または引数)でmvコマンドを使用して名前を変更します。echo結果が希望の結果であると確信したら、削除してください。

上記の結果は次のとおりです。

mv ./27_07_2017case5.log case5_27_07_2017_1.log
mv ./27_07_2017file1vc001vpxd-1605.log file1vc001vpxd-1605_27_07_2017_1.log
mv ./27_07_2017file2vc001vpxd-9169.log file2vc001vpxd-9169_27_07_2017_1.log
mv ./27_07_2017file3vc001vpxd-4640.log file3vc001vpxd-4640_27_07_2017_1.log
mv ./27_07_2017file4vc001vpxd-9170.log file4vc001vpxd-9170_27_07_2017_1.log
mv ./27_07_2017file5.log file5_27_07_2017_1.log
mv ./27_07_2017file5vc001vpxd-4641.log file5vc001vpxd-4641_27_07_2017_1.log
mv ./27_07_2017number-blahblahblah5.log number-blahblahblah5_27_07_2017_1.log
mv ./27_07_2017number-blahblahblah5AAABBC.log number-blahblahblah5AAABBC_27_07_2017_1.log
mv ./27_07_2017number5.log number5_27_07_2017_1.log

おすすめ記事