フルサイズとその中のファイル数に基づいてディレクトリを移動します。

フルサイズとその中のファイル数に基づいてディレクトリを移動します。

すべての音楽フォルダを整理しようとしています(音楽フォルダがたくさんあります)。ただし、削除するのではなく、空のフォルダ、数Mbしかない、またはファイルが少ないフォルダを移動したいと思います。

find次のコマンドを使用してすべての空のディレクトリを移動しました。

find . -empty -type d -exec mv {} /share/Container/beetsV2/music/my_empty_folders \;

...しかし、サイズに応じてディレクトリを見つける方法がわからないようです。私は次のことがうまくいくと思いましたが、予想よりも多くの成果を上げているようです。

find . -size -5M -type d -exec mv {} /share/Container/beetsV2/music/my_folders_under_5Mb \;

いくつかのファイルだけが含まれているディレクトリを見つけると、上記のタスクを実行する単一のコマンドラインが見つからないようです。存在しますか?

ベストアンサー1

からman find

-size n [cwbkMG]ファイルは丸められ、n単位よりも小さい、大きい、または正確にn単位のスペースを使用します。

このスイッチはディレクトリとは何の関係もありません。ディスク使用量


回避策は、次をbash使用してfind出力のすべてのディレクトリを処理することですmv

move_dirs_smaller_than() {
    export MAX=$(($1*1024)) # $1 is in MiB
    export path=$2          # $2 /path must be outside of .
    find . -mindepth 1 -type d -exec bash -c '
        read size _ < <(du -sk "$1")
        ((size < MAX)) && echo mv -- "$1" "$path"
    ' bash {} \; -prune
}

echo出力が十分に良く見える場合は、文を削除してください。

5MiBの機能使用法:

/pathしなければならないいいえ現在のディレクトリ(または使用find ! ./dir):

move_dirs_smaller_than 5 /path

find関連マニュアルページを確認し-prune、必要に応じて-mindepth作成してください。-maxdepth

おすすめ記事