2017-05-25 8 views
1

にフォルダ内のすべてのファイルの名前を変更する方法1はプレフィックスとし、昇順

random_files.jpg 
that\ may\ contain\ spaces.jpg 
and_differ_in_extensions.mp4 

PREFIX_1.jpg 
PREFIX_2.jpg 
PREFIX_3.mp4 

にbashスクリプトを経由して名前を変更しますか?より正式には、ディレクトリ内のすべてのファイルの名前を、形式PREFIX_N.extの順序付きリストに変更するにはどうすれば元のファイル名から.extが保存されますか。

for f in *; do 
    [[ -f "$f" ]] && mv "$f" "PREFIX_$f" 
done 

以下

私の試みは、プレフィクスだけを変更します。

+0

ディレクトリに切り替えて実行しています。 'for f in *; do [[-f "$ f"]] && mv "$ f" "PREFIX_ $ f"; done'はプレフィックスを変更します。 – George

答えて

1

*を使用してファイルをループし、引用符付きのvarでアクセスして、すべての特殊文字を保持することができます。

パラメータ拡張を使用して、ファイルの先頭を削除して.にして、新しいファイル名に追加することができます。

x=1;for i in *;do [[ -f "$i" ]] && mv "$i" "PREFIX_$((x++)).${i##*.}";done 

あなたは開始時に割り当てを削除し、findを使用してあなたがループのためにこれを使用することができ$((x++))

1

$((++x))に変更することができますが、xがすでに設定されていないわかっている場合:

while IFS= read -rd '' file; do 
    ext="${file##*.}" 
    echo mv "$file" "PREFIX_$((++i)).$ext" 
done < <(find . -type f -name '*.*' -maxdepth 1 -print0) 

出力が完了したら、mvコマンドの前にechoを削除してください。

+1

スクリプトを実行する前にテストする "echo mv ..."テクニックが好きです。 – George