bash脚本重命名当前目录中的所有文件以及层次结构中位于其上的所有目录?

时间:2014-08-04 14:48:38

标签: bash

我编写了以下脚本来重命名当前目录的所有文件夹中的所有文件。但我遇到了问题,因为它不仅重命名文件夹中的文件,还重命名当前目录中的所有文件夹和层次结构中的父目录。我意识到这是因为。和..出现在当前目录中。但是如何摆脱它们?

   for i in *
    do
        cd $i
        for j in *
        do
            mv $j $i$j
        done
        cd ..
    done

问题是,我有很多文件夹,它们包含名为image0001到image0100的图像。我想将所有图像复制到一个文件夹中。所以他们互相覆盖。这就是我想重命名图像的原因。

1 个答案:

答案 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