これを使用すると、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
空のファイルを削除し、ディレクトリ構造をそのまま残します。