我编写了以下脚本来重命名当前目录的所有文件夹中的所有文件。但我遇到了问题,因为它不仅重命名文件夹中的文件,还重命名当前目录中的所有文件夹和层次结构中的父目录。我意识到这是因为。和..出现在当前目录中。但是如何摆脱它们?
for i in *
do
cd $i
for j in *
do
mv $j $i$j
done
cd ..
done
问题是,我有很多文件夹,它们包含名为image0001到image0100的图像。我想将所有图像复制到一个文件夹中。所以他们互相覆盖。这就是我想重命名图像的原因。
答案 0 :(得分:4)
我认为出现问题的可能是cd $i
有时会失败(也许是因为$i
不是目录?或者因为它包含空格,所以会触发单词拆分?),所以你留在同一个目录中,然后cd ..
移动向上一个目录。
要解决这个问题(以及可能出现的其他潜在问题),我建议您的脚本更加谨慎:
for dir in */ ; do
pushd "$dir" || continue
for file in image???? ; do
mv "./$file" "${dir%/}$file"
done
popd
done