在重命名后将子子目录文件移动到父目录的Shell脚本

时间:2018-08-11 05:49:18

标签: bash shell rename batch-rename

我想编写一个shell脚本,该脚本会将文件放在父目录中,以避免不必要的导航和更有意义的文件名。例如。

实际:

test-2
    Chrome_68
        errors
            1.png
test-5
    Chrome_68
        errors
            1.png
test-10
    Chrome_68
        errors
            1.png
test-11
    Chrome_68
        errors
            1.png

预期:

test-2
    test-2.png
test-5
    test-5.png
test-10
    test-10.png
test-11
    test-11.png

尝试输入的代码:

testDir=/tmp/screenshots
find $testDir -name *.png
find $testDir -mindepth 1 -type f -print -exec mv {} . \;
find . -type d -name Chrome_68 -exec rm -f {} \;
find . -type d -name errors -exec rm -f {} \;

在这里,我要删除sub1和sub2目录,并根据其父文件夹名称重命名,从而将1.png移至顶部。另外请注意,Chrome_68和错误也可以使用不同的名称。谁能建议一种简单的方法来编写shell脚本来实现这一目标?

1 个答案:

答案 0 :(得分:1)

具有姓氏:

prename -n 's|(test-.*)/Chrome_68/errors/[0-9]+|$1/$1|' test-*/Chrome_68/errors/1.png

输出:

test-10/Chrome_68/errors/1.png renamed as test-10/test-10.png
test-11/Chrome_68/errors/1.png renamed as test-11/test-11.png
test-2/Chrome_68/errors/1.png renamed as test-2/test-2.png
test-5/Chrome_68/errors/1.png renamed as test-5/test-5.png

如果输出正常,请删除-n,然后使用rm -r test-*/Chrome_68/