フォルダ名に基づいて複数のフォルダの.jpgファイル名を変更するには?また、.jpg
ファイルを移動せずにそのフォルダに保存したいと思います。フォルダ名にスペースはありません。
たとえば、フォルダ名がRedの場合、生成されるファイル名は次のようになります。
Red000001.jpg
Red000002.jpg
Red000003.jpg
次のコマンドがありますが、望ましくない結果が発生し、名前が変更されたファイルをそのフォルダの外に移動し、ファイル名を「不正」にします。
start=$PWD;
for directory in *; do
cd "$directory";
for filename in *; do
mv "$filename" ../"Folder $directory - $filename";
done;
cd "$start";
done
答え1
cd
複数のディレクトリに入る必要がある場合は、それを使用してcd -
最後の現在の作業ディレクトリに移動します。またはpushd
/ popd
(で)を使用してくださいbash
。
for directory in *; do
pushd "$directory"
index=1
for filename in *; do
extension="${filename##*.}"
if [ "$filename" != "$extension" ]; then
extension=".$extension"
else
# i.e. there is no dot in the file name
extension=""
fi
target_filename="${directory}$(printf "%06d" "$index")${extension}"
if [ -f "$target_filename" ]; then
echo "File ${target_filename} exists; aborting."
exit 3
fi
mv "$filename" "${target_filename}"
((index++))
done
popd
done
このコードは名前の競合をうまく処理しません(すでにファイルがある場合Red00004
)。ただ確認して中断します。