ディレクトリをミラーリングしようとしています。そして特定のディレクトリのファイル構造です。しかし、画像ファイルにサイズがないことを望みます。たとえば、次のディレクトリツリーがあるとします。
original_folder
├── images
│ ├── image1.jpg (2 MB)
│ ├── image2.jpg (3 MB)
├── videos
│ ├── video1.mp4 (300 MB)
│ ├── video2.mp4 (400 MB)
私は次のような出力が欲しい。
mirrored_folder
├── images
│ ├── image1.jpg (0 b)
│ ├── image2.jpg (0 b)
├── videos
│ ├── video1.mp4 (0 b)
│ ├── video2.mp4 (0 b)
次のコマンドを試してみましたoriginal_folder
。
cd original_folder
find . -name '*' -exec touch ../mirrored_folder/'{}' \;
ただし、このコマンドは実行を試みますtouch ../mirrored_folder/./images/image1.jpg
。コマンドを混同することに注意してください。私がしたいことをどのように達成できますか?
答え1
GNU cp
(からコアツール)次のように実行できます。
cp -r --attributes-only original_folder/* mirrored_folder/
~から男CP:
--attributes-only
ファイルデータはコピーされず、属性のみがコピーされます。
-R
、-r
、--recursive
再帰的にディレクトリをコピーする
find
OPがMacOSでxeと言うようにコマンドを使用し、cp
コマンドに--attributes-only
オプションはありません。
find original_folder/ -type d -exec \
sh -c 'mkdir -p mirrored_folder/${1#*/}' _ {} \; \
-o -type f -exec \
sh -c 'touch mirrored_folder/${1#*/}' _ {} \;
このソリューションは、プロパティ(デフォルト:モード、所有権、タイムスタンプ)を保持するソリューションとは異なり、新しいディレクトリとfind
ファイルを作成します。cp
答え2
これはうまくいくようです:
cd dest || exit
(cd orig && find . -type d -print0) | xargs -r0 mkdir -p
(cd orig && find . -type f -print0) | xargs -r0 touch