次のフォルダとファイルがあります。
.
├── photos
│ ├── photo-a
│ │ ├── photo-a.meta.json
│ │ └── photo-a.json
│ ├── photo-b
│ │ ├── photo-b.meta.json
│ │ └── photo-b.json
...
There are more folders and files in the photos folder in the same structure
すべてのファイルと他のファイルを別のファイルphoto-a.json
にコピーしたいです。デフォルトでは、ファイルで終わるファイルはすべて除外し、ファイルで終わるファイルだけをコピーしたいと思います。photo-b.json
photos-copy
.meta.json
.json
したがって、正しく完了すると、photos-copy
フォルダは次のようになります。
.
├── photos-copy
│ ├── photo-a.json
│ └── photo-b.json
...
いくつか試してみましたが、cp -a ./photos/*.json ./photos-copy
ファイル.meta.json
拡張子.json
。
どうすればいいですか?
ベストアンサー1
いくつかのオプションが思い浮かんだ。
rsync --dry-run -av --prune-empty-dirs --exclude '*.meta.json' --include '*.json' photos/ photos-copy/
または、1つもない場合rsync
(なぜできませんか?)、構造を維持しながらファイルをコピーします。
cp -av photos/ photos-copy/
rm -f photos-copy/*/*.meta.json
このバリアントはファイルを単一のディレクトリにマージします。
cp -av photos/*/*.json photos-copy/
rm -f photos-copy/*.meta.json
名前を含まないすべてのアイテムbash
と一致するようにシェルに指示する拡張パターンマッチングを使用すると、よりクールな操作を実行できます。.meta
shopt -s extglob
cp -av photos/*/!(*.meta).json photos-copy/