cp AND rsyncは、すべてのサブディレクトリからすべての種類のファイルを除いて、ディレクトリのみを保持します。

cp AND rsyncは、すべてのサブディレクトリからすべての種類のファイルを除いて、ディレクトリのみを保持します。

これを使用すると、find . -type d検索から親ディレクトリまたはサブフォルダ内のすべてのファイルが除外されます。すべてのフォルダとサブフォルダのファイルを除いて、フォルダのみをコピーするように-exec cp -p拡張したいと思います。rsync "{}" destination \;.pdfや.jpgなどの拡張子で除外する方法だけを知っていますが、ファイルが複数あり、ディレクトリが何百もの場合はどうなりますか?この問題にどのように対処する必要がありますか?

ありがとう

答え1

find+ mkdir+touchコメントで述べたように動作します

find . -type d -exec sh -c 'dir="{}"; mkdir -p "destination/$dir" && touch -cr "$dir" "destination/$dir"' \;

前述のIporコマンドは、touch -r <olddir> <newdir>olddirから変更時間を取得し(olddirを変更せずに)、newdirに同じ時間を設定します。追加すると、-c誤って新しいファイルが生成されないことが保証されます。findは相対パスを印刷することを期待しているので、ソースディレクトリで実行する必要があります。各ディレクトリごとにシェルを作成するので、少し遅くなるため、以下の選択肢を好むことができます。


選択する:

cp --attributes-only -pr ./ destination && find destination -type f -empty -delete

すべてのファイルとディレクトリを再帰的に「コピー」してタイムスタンプは保存しますcpが、内容は保存しません。だから高速です。ファイル生成をスキップするのと同じくらい高速ではありませんが、高速です。その後、find空のファイルを削除し、ディレクトリ構造をそのまま残します。

関連情報