動的ファイル拡張子を固定ファイル拡張子に置き換える

動的ファイル拡張子を固定ファイル拡張子に置き換える

特定の日付タイムスタンプを含む動的ファイル拡張子を固定ファイル拡張子に置き換える必要があります。

例えば、

08242016G0040156.ZIP.20160907141452  
09042016SHOC0003.ZIP.20160904044504 

08242016G0040156.ZIPそれぞれとに置き換える必要があります09042016SHOC0003.ZIP

答え1

文字列操作を含む単純なループであるbashを使用して

for f in ./*.ZIP.*
do
   mv "$f" "${f%.*}"
done

"${f%.*}".文字列から以降のすべての項目(最後の項目を含む)を削除します$f

答え2

for filename in $(find . -name '*ZIP*'); do mv $filename $(echo $filename | sed 's|\(.*\)\.ZIP.*|\1.ZIP|g') ; done

答え3

perlデフォルトのコマンドを使用してくださいrename

$ touch 08242016G0040156.ZIP.20160907141452 09042016SHOC0003.ZIP.20160904044504

$ rename -n 's/\.\d+$//' *ZIP*
rename(08242016G0040156.ZIP.20160907141452, 08242016G0040156.ZIP)
rename(09042016SHOC0003.ZIP.20160904044504, 09042016SHOC0003.ZIP)

-nテスト実行オプション。名前の変更が問題ない場合は、実際の名前を変更するために削除してください。


ファイルが複数のサブディレクトリにある可能性がある場合は、以下を使用してください。find

find -name '*ZIP*' -exec rename -n 's/\.\d+$//' {} +


.最後の使用以降に数字以外の文字がある場合

rename -n 's/\.[^.]+$//' *ZIP*

関連情報