パターンに一致するすべてのファイルを同じ構造に一致する新しいフォルダツリーにコピーする方法

パターンに一致するすべてのファイルを同じ構造に一致する新しいフォルダツリーにコピーする方法

フォルダ「All」があります

AllFolders
    F1
        some_file_20170315_xyz.txt
        some_file_20170314_xyz.txt
        ....
    F2
        some_other_file_20170315_abc.txt
        some_other_file_20170314_abc.txt
        ...
    ...
    Fn 

特定の日付に一致するすべてのファイルを別の空のフォルダにコピーして、フォルダ構造もコピーされ、次のようになるようにするにはどうすればよいですか?

Folder_20170315
    F1
        some_file_20170315_xyz.txt
    F2
        some_other_file_20170315_abc.txt

答え1

1 つの方法は、findと を使用することですcp

find . -iname '*20170315*' -exec cp --parents {} /tmp/Folder_20170315 \;

宛先フォルダはすでに存在している必要があります。 必要に応じて、その作成をスクリプト化することもできます。

ファイル名を確認したいようですが、findファイルの日付を確認するのにも使用できます。

答え2

は Mac では利用できないためcp --parents、同様の問題を解決するために次の 2 つのコマンドを使用しました。

find . -name '*.example' | xargs -I FOO dirname FOO | xargs -I FOO mkdir -p /new/root/directory/FOO
find . -name '*.example' | xargs -I FOO cp FOO /new/root/directory/FOO

最初のコマンドはディレクトリ ツリーを作成します。2 番目のコマンドはファイルをコピーします。

これは がfind高速であることを前提としています。 がfindパフォーマンスのボトルネックである場合は、さらに最適化する必要があります。 たとえば、操作を関数に移動することができます。

関連情報