拡張ごとに混合ディレクトリを分割する最良の方法は何ですか?

拡張ごとに混合ディレクトリを分割する最良の方法は何ですか?

複数のファイル形式を含むディレクトリツリーがあり、このディレクトリを1つのファイル形式のみを含む同じディレクトリ構造に分割したいと思います。

最良のアプローチは何ですか?

例: 前

dir1 -- dir2 foo.jpg
        dir3 foo.mpg

後ろに

foo_jpg -- dir1 -- dir2 foo.jpg
                   dir3

foo_mpg -- dir1 -- dir2
                   dir3 foo.mpg

答え1

まず、ハードリンクを使用して速度を上げ、多くのディスク容量を消費しないように、2つのツリーコピーを作成します。

mkdir foo_jpg foo_mpg
cp -al dir1 foo_jpg
cp -al dir1 foo_mpg

次に、ツリーから不要なアイテムを削除します。

find foo_jpg -type f ! -name '*.jpg' -delete
find foo_mpg -type f ! -name '*.mpg' -delete

ディレクトリ構造と要求されたファイルのみを含む2つのツリーがあります。元のツリーを削除するオプションがあります。

答え2

私はこの答えを見つけました:

rsync --recursive --include='*.jpg' --filter='-! */' '/dir1' '/foo_jpg/'

関連情報