如何根据文件夹名称重命名多个文件夹中的 .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
)。它只是检查并中止。