ランダムに名前を付けられた複数のファイル名を一度に変更するには?

ランダムに名前を付けられた複数のファイル名を一度に変更するには?

ディレクトリにはランダムに名前が付けられたファイルがたくさんあります'.wav'。例えば

090913yui.wav
jiyafa123.wav
.
.
.
awe-6rt.wav

ファイル名を次に変更したい

file1.wav
file2.wav
.
.

など。

誰でも同じことをする方法を助けることができますか?端末を介してのみサーバーに接続できます。したがって、いくつかのコマンドを使用するだけです。

答え1

ファイル名ワイルドカードパターンが*.wav変更したいすべての名前と一致すると仮定すると、次のループを使用して、一致する名前の名前を必要に応じて変更できます。

n=1
for name in *.wav; do
    while [ -e "file$n.wav" ]; do n=$((n+1)); done
    mv -- "$name" "file$n.wav"
done

これは一致するすべての名前を繰り返します。各名前に対して、$n名前がfile$n.wavまだ存在しない整数を探します。次に、現在の名前をその名前に変更します。

答え2

使用真珠rename(すべてのオペレーティングシステムとシェルで動作し、ツールボックスに配置する必要があります):

rename -n 's/.*/"file" . ++$::c . ".wav"/se' ./*.wav

以下を提供します。

rename(090913yui.wav, file1.wav)
rename(jiyafa123.wav, file2.wav)

またはゼロパディングを使用してください。

rename -n 's/.*/"file" . sprintf("%.3d", ++$::c) . ".wav"/se' ./*.wav

以下を提供します。

rename(./090913yui.wav, file001.wav)
rename(./jiyafa123.wav, file002.wav)

スイッチの削除-n、別名。試運転あなたの試みが満足なとき実際の名前に変更

答え3

zshのzmvの使用:

autoload -Uz zmv
n=0; zmv -n '*.wav' 'file$((++n)).wav'

または、lファイルがls出力やその他のほとんどの項目で数字でソートされるように、0から幅3まで数字を埋めます。

n=0; zmv -n '*.wav' 'file${(l[3][0])$((++n))}.wav'

満足すれば削除-n(テスト実行)します。潜在的な競合があるかどうかを事前に確認してください。

n一部のファイルの名前が変更された場合は、既存のファイルの最大数に初期化してfile<number>.wavモード*.wavをに変更します(^file<->).wav

関連情報