web-dev-qa-db-ja.com

特定のディレクトリでファイルの名前を段階的に変更しますか?

.txtファイルの束を含むディレクトリがあり、これらのファイルの名前を1つのコマンドで変更するコマンドが必要なので、名前はfile1.txt , file2.txt, file3.txt , etc .になります。

ヘルプがありますか?

7
nux

ターミナルでこれを使用して、必要に応じてファイルの名前を変更できます。

j=1;for i in *.txt; do mv "$i" file"$j".txt; let j=j+1;done

それは仕事をします。

説明:

  • カウンターjを設定し、最初に1に設定します
  • Forループを開始し、シェルグロブ*.txtを使用して、すべてのtxtファイルを取得します。
  • ファイルごとにmvを使用して名前を変更し、カウンタを1増やします。
19
souravc

通常はデフォルトのインストールに含まれているrenameコマンドを使用できます。

c=0 rename 's/.*/sprintf("file%05d.txt", ++$ENV{c})/e' *

最初にテストを行う場合は、-nフラグを使用します。

c=0 rename -n 's/.*/sprintf("file%05d.txt", ++$ENV{c})/e' *

これが機能する方法は、引数ごとにPerl s///式を実行し、元の文字列から置換された文字列に名前を変更します。置換文字列では、sprintfを使用して名前をフォーマットします。ここで、環境変数cを1からのカウンターとして使用します。

ほとんどの場合、各番号の先頭に「0」が必要な場合もあります。%05dはトリックを行います。5は桁数です。

7
janos

次のコマンドも、ファイルの名前を段階的に変更します。

cd (directory containing files )

次に、このスクリプトを実行します。

count=1
for i in *; do
    mv "${i}" file${count}.`echo "${i}" | awk -F. '{print $2}'`
    ((++count))

done 
2
nux