私のデスクトップにModelsというフォルダがあります。そのフォルダ内には、.jpg拡張子を持たないJPEGファイルを含む名前付きフォルダがあります。 JPEGファイル名は任意のハッシュです。 bashスクリプトを使用して、これらのjpegファイルの名前をディレクトリ名に徐々に一括変更し、各ファイルに.jpg拡張子を追加したいと思います。
基本的には
ロールモデル/
Alice/
a5ccB2ff3e
ee420bc4a
2acee54dc
...
Alex/
de33fa24c0
d1eaa48e0a
...
私はそのような人になりたい
ロールモデル/
Alice/
Alice001.jpg
Alice002.jpg
Alice003.jpg
...
Alex/
Alex001.jpg
Alex002.jpg
...
答え1
あなたの質問の説明に基づいて、私は仮定します。フォルダ内のファイルの総数は999を超えることはできません。
以下は単純なbashスクリプトです。最上位ディレクトリ(モデルなど)で実行します。
#!/bin/bash
for i in ./*
do
if [ -d "$i" ]
then
j=001
for k in "$i"/*
do
mv "$k" "$i"/"$i""$j".jpg
j=${j#0}
if [ ${j:0:1} -eq 0 ]
then
j=${j#0}
fi
(( j++ ))
j=`printf '%03i' $j`
done
fi
done
まず、ディレクトリであるかどうかに関係なく、Modelsのすべてのファイルを確認しますif [ -d "$i" ]
。次に、そのディレクトリ内のすべてのファイルの名前がmv "$k" "$i"/"$i""$j".jpg
。
j=${j#0}
if [ ${j:0:1} -eq 0 ]
then
j=${j#0}
fi
上記のコードは最初からすべてのゼロを削除するため、次のエラーは発生しません。
((: 008: value too great for base (error token is "008")
printf: 008: invalid octal number
そして
j=`printf '%03i' $j`
j
値を3ビット長にします。
答え2
Debian_yadav提案の単純化されたバージョンを試すこともできます:
for i in *
do if [ -d "$i" ] && cd "$i"
then j=0
for k in *
do ((j++))
echo mv "$k" $(printf "%s%03d.jpg" $i $j )
done
cd ..
fi
done
デバッグ専用ですecho
。表示される内容が気に入ったら削除してください。
利用可能なすべてのディレクトリに移動cd
してカウンタをリセットし、すべてのターゲットファイルを繰り返し、各ディレクトリのカウンタを増やし、名前を変更します。