发布
社区首页 >问答首页 >自动展平一些目录而不是其他目录?

自动展平一些目录而不是其他目录?
EN

Stack Overflow用户
提问于 2013-07-16 21:37:08
回答 1查看 88关注 0票数 0

我有一个目录,里面有几千个子目录(但这些子目录中没有子目录),我只需要扁平化其中一些子目录的内容,所以基本上是将这些目录的内容放到根目录中。

但是我不能用所有的子目录来做到这一点,并且我不能展平的那些子目录中有多个文件。

有没有办法自动做到这一点?Python脚本、perl脚本、bash或其他什么?我真的,真的,真的不想手工做这件事...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-17 19:07:59

bash中类似这样(foo表示您想要展平的目录):

代码语言:javascript
代码运行次数:0
复制
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作为目录名:

代码语言:javascript
代码运行次数:0
复制
# 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配置文件中设置)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17678063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档