あるディレクトリには、
...
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+666
667 から開始します。- 図のように 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