100以上のファイルを含むフォルダを移動しますか?

100以上のファイルを含むフォルダを移動しますか?

多くのフォルダを含むディレクトリがあり、100を超えるファイルを含むフォルダを移動したいと思います。

私はこれを行うつもりです:

find . -type d | while read d; do if 

今これは私にとって難しい部分です。

各ディレクトリに移動して、100個以上のファイルが含まれていることを確認するためにforを実行しますか?では、どうすればよいですか?

for f in *; do cd $f; ll | wc; ?

ディレクトリ内のファイルの総数を取得し、そのディレクトリを移動する方法は少し混乱します(100を超えるファイルが含まれています)。

ベストアンサー1

ディレクトリに隠されていない名前の数を数えるには、dir次のようにします。

set -- dir/*

これにより、*ディレクトリ内のglobが展開され、位置引数が結果名に設定されます。パターンが一致した場合何もないなら数はです$#

特定の最上位ディレクトリのすべてのディレクトリを繰り返すには、top-dir各ディレクトリの名前数を数え、100を超える名前のディレクトリに対していくつかの操作を実行します。

for subdir in top-dir/*/; do
    set -- "$subdir"/*
    if [ -e "$1" ] && [ "$#" -gt 100 ]; then
        # do something to "$subdir"
    fi
done

bashシェルでnullglobシェルオプションを設定すると、setコマンドが名前と一致するかどうかを確認する必要はありません。

shopt -s nullglob

for subdir in top-dir/*/; do
    set -- "$subdir"/*
    if [[ $# -gt 100 ]]; then
        # do something to "$subdir"
    fi
done

また、dotglobシェルオプションを設定すると、コード内のすべてのパターンが隠された名前と一致するようになります。

上記のコードスニペットでは、「do some to "$subdir"」コメントは、そのサブディレクトリで実行する必要がある操作に置き換えることができます。たとえば、邪魔にならない場所に移動するには、次のようにします。

mv "$subdir" some/other/dir

これにより、そのファイルがディレクトリに移動されますsome/other/dir

おすすめ記事