既存のファイルを含むツリーから新しい空のディレクトリツリーを作成する

既存のファイルを含むツリーから新しい空のディレクトリツリーを作成する

たくさんのファイルを含む大きなディレクトリツリーがあります。

新しい場所にディレクトリ構造を再作成したいのですが、ファイルではなくディレクトリのみです。

のマニュアルページを確認しましたcpが、役立つ引数は見つかりませんでした。

答え1

rsync -av -f"+ */" -f"- *" /.../SOURCE /.../DESTINATION

答え2

find . -type d -exec mkdir -p ~/to/{} \;

この質問に対する @whitequark の回答から引用:Mac OS Xでファイルをコピーせずにディレクトリ構造をコピーする

答え3

もう一つのアプローチは、非常に便利な を使用しtree、強力なオプションに基づいてディレクトリツリーをナビゲートすることです。ディレクトリのみ、空のディレクトリを除外、パターンを含む名前を除外、パターンを含む名前のみを含めるなどのオプションがあります。man tree

アドバンテージ: リストを編集または確認したり、スクリプトを大量に作成して空のディレクトリを頻繁に作成したりすることができます。

アプローチ: を使用してディレクトリのリストを作成しtree、そのリストを引数入力として使用します。mkdir

tree -dfi --noreport > some_dir_file.txt

-dfiディレクトリのみをリストし、それぞれの名前のフルパスを出力し、ツリーにインデント行を出力しないようにします。

--noreport出力ファイルに無駄な情報が含まれないように、ツリーリストの最後にファイルとディレクトリのレポートを印刷しません。

次に、空のディレクトリが必要な場所に移動し、実行します。

xargs mkdir < some_dir_file.txt

答え4

同様のニーズに遭遇したので、これを見つけました。rsync の十分に新しいバージョンでは、これが最善の策です。

rsync の最新バージョンをお持ちでない場合は、次の方法で解決できます:

find path/to/source -type -d -exec mkdir path/to/dest/'{}' \; -exec chown --reference='{}' path/to/dest/'{}' \; -exec chmod --reference='{}' path/to/dest/'{}' \;

(このバリエーションは権限のミラーリングに使用できます)

関連情報