ディレクトリ内のファイルの名前を変更する

ディレクトリ内のファイルの名前を変更する

あるディレクトリには、

...
DSC_0002
DSC_0005
DSC_0010
...

ファイルの名前を変更したい

ファイル_0001
ファイル_0002
...

おそらく、0001からではなく番号付けを始める必要があるでしょう

答え1

これらのファイルを含むディレクトリが /path/to/dir であるとすると、
必要なスクリプトは次のようになります。

start=1
cd "/path/to/dir"
for file in ./*;do
  mv "${file}" "FILE_$(printf "%04d" $start)"
  start=$((start+1))
done

答え2

試す

ls | awk '{printf "mv %s FILE_%04d\n",$0,NR ;} ' | bash
  • ファイルに奇妙な名前が付いていないことを確認してください。
  • remove |プレビューするには bash 部分を使用します。
  • NR+666667 から開始します。
  • 図のように 01 または 000001 を生成するには、%02dまたは を使用します。%06d

答え3

次のようなことができます:

#!/bin/bash 
Counter=${1:-1}   # It will take the starting number as 1st parameter
WhichDir=${2:-.}  # It will take the path as 2nd parameter

                  # We try to see if the directory exists and if you can go there
(cd "$WhichDir" 2>/dev/null) || { echo "# $WhichDir NOT FOUND " ; exit 1; }

cd "$WhichDir"                            # it exists and you can go there
shopt -s nullglob                         # see notes
for f in DSC_*                            # for all the files in this dir
do
  New_Name=$(printf "FILE_%04d.jpg" $Counter)
                                          # change .jpg in what you need
  Counter=$(($Counter +1))                # increase the counter
  echo "mv -i \"$f\" \"$New_Name\" "      # the -i will prompt before overwrite
  # mv -i "$f" "$New_Name"                # uncomment this line to make it works
exit 0

ノート

  • あなたが遊ぶmv危険です。既存のファイルを上書きする可能性があります。ディレクトリを移動/名前変更する可能性があります。したがって、スクリプトを実行する前に視覚的にチェックすることをお勧めします。その後、その出力をシェルにパイプできます。
    例: ./Myscript.sh、すべて正常ですか? はいの場合は、次のように記述できます./Myscript.sh | /bin/bash(または、次の行の「エコー」またはコメントを消去して変更することもできます)。
  • mv -i上書きする前にプロンプ​​トが表示されるように書く方が良いでしょう。
  • DSC_*現在のディレクトリにファイルがない場合、shopt -s nullglob展開エラーを回避します。

  • 一般的に解析するのは安全ではありません出力lsあなたの場合、ファイルにはカメラからの標準名が付けられるはずなので、これは実際の問題ではないはずですDSC_nnnn.jpg

  • 通常、拡張子 ( またはまたは.jpg)があります... 必要に応じてスクリプト内で変更または削除します。.tif.raw

関連情報