压扁一些目录而不是其他目录?

时间:2013-07-16 13:37:08

标签: automation directory flatten

我有一个目录,里面有几千个子目录(但是这些子目录中没有子目录),我需要展平一些子目录的内容,所以基本上把这些目录的内容带到根目录。

但我无法对所有子目录这样做,而我无法展平的子目录中有多个文件。

任何方式自动执行此操作? Python脚本,perl脚本,bash还是其他什么?我真的,真的,真的不想亲手做到这一点......

1 个答案:

答案 0 :(得分:0)

类似这样的内容,在bash中(foo代表您要展平的目录):

for x in foo/*
do
    COUNT=`ls -1 "$x" | wc -l`

    if ([ -d "$x" ] && (test $COUNT -le 1))
    then
        if test $COUNT -eq 1; then
            mv "$x"/* $1
        fi
        rmdir "$x"
    fi
done

这也会从foo中删除一个空的子目录。

您也可以将其放入shell脚本文件中,并使用$1作为目录名称:

# Exit it a directory name isn't given

if [ "$1" = "" ] ; then
    echo "Usage: $0 directory"
    echo "Flattens directory"
    exit
fi

for x in "$1"/*
do
    COUNT=`ls -1 "$x" | wc -l`

    if ([ -d "$x" ] && (test $COUNT -le 1))
    then
        if test $COUNT -eq 1; then
            mv "$x"/* "$1"
        fi
        rmdir "$x"
    fi
done

您可以将其放入名为flatten的文件中,然后运行sh flatten foo以展平目录foo。或者,chmod +x flatten并运行./flatten foo。最终,如果您经常使用它,可以将其移动到我们PATH中的目录,这样您就可以输入flatten foo。我所拥有的是Linux上我的主目录中的bin文件,我在登录时放置了自己想要的工具,并将~/bin放入我的PATH(设置)在bash个人资料中。