1

私は Linux を使っていて、面白い写真をたくさんダウンロードしています。残念ながら、download (1)や などの重複した名前がたくさん残っていimage.jpegます。それらをすべてもう少し役立つものに変更したいと思います。

(できれば bash を使用して) すべてのファイルの名前を、先頭にゼロを付けた連続した 4 桁の数字に変更する方法はありますか?

例えば:

0001
0002
0003
0004
....
4

4 に答える 4

3

前の回答で提供されたコード スニペットは、それを行うエレガントな方法ですが、タイプミスまたはシェルの非互換性により、正しく機能しない可能性があります。

代わりに以下のコードを試してください。同じことを行いますが、すべてのショートカットはechoループ内のデバッグ コマンドで明示的に記述されています。

counter=1
cd /my/image/directory
for f in $(ls -1)
do
  new_filename=$(printf "%04d" ${counter})     
  echo "renaming ${f} ..to.. ${new_filename}"
  mv ${f} ${new_filename}
  (( counter=${counter}+1 ))
done

画面出力は少しおしゃべりになります。ファイルが多すぎる場合は、コマンド| tee screen.outを使用して行末に追加することをお勧めしますdone。戻って、screen.out に記録されたどのファイルに何が起こったのかを確認できるようにします。

于 2013-04-30T19:23:22.907 に答える
1

これを行うための独自のツールを作成しました。また、ファイル拡張子も保持していますが、これについては触れていませんが、おそらく含まれているはずです。コードは次のとおりです。

#!/bin/sh

dir=$1
cd $dir
echo "Renaming all files in $dir."
COUNTER=1
for i in `ls -1`
do
  extension=${i##*.}
  mv "$i" "$COUNTER.$extension"
  echo "$i ==> $COUNTER.$extension"
  COUNTER=$(expr $COUNTER + 1 )
done

(執筆時点では)先行ゼロは含まれていませんが、仕事は完了します。

于 2013-05-20T04:27:23.297 に答える
-1

フォルダー内のサフィックス .bash からサフィックス .sh のすべてのファイルの名前を変更しようとするのは、

rename .bash .sh *.bash
于 2014-06-25T12:53:59.980 に答える
-1

どのファイルの名前が何に変更されたか気にしない限り、簡単です:)

counter=1
for f in *; do
    mv "$f" "$( printf "%04d" $((counter++)) )"
done
于 2013-04-30T19:03:51.587 に答える