0

内部に数千のサブディレクトリを持つディレクトリがあり (ただし、これらのサブディレクトリ内にはサブディレクトリはありません)、サブディレクトリの一部のみの内容をフラット化する必要があるため、基本的にそれらのディレクトリの内容をルート ディレクトリに移動します。

しかし、すべてのサブディレクトリでそれを行うことはできず、フラット化できないサブディレクトリには複数のファイルが含まれています。

これを自動的に行う方法はありますか?Python スクリプト、Perl スクリプト、Bash などでしょうか。私は本当に、本当に、これを手動で行う必要はありません...

4

1 に答える 1

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ます。

これをシェル スクリプト ファイルに入れ$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。最終的に、何度も使用する場合は、私たちのディレクトリに移動してPATHflatten foo. 私が持っているのは、binLinuxのホームディレクトリにあるファイルで、ログイン時に必要なツールを配置~/binし、自分のPATHbashプロファイルに設定)に配置します。

于 2013-07-17T11:07:58.593 に答える