我有以下文件夹和文件:
.
├── 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
扩展名结尾。
我怎样才能做到这一点?
有几个选择浮现在脑海中。
或者如果你没有
rsync
(为什么没有!?),这将复制保留结构的文件此变体会将文件展平到单个目录中
你可以用它的扩展模式匹配做更多花哨的事情
bash
,这里告诉 shell 匹配名称中不包含.meta
的所有内容:使用 rsync:
rsync -rv --include="*/" --exclude="*.meta.json" --include "*.json" --exclude="*" ./photos/ photo-copy/
原目录结构:
输出:
我用前面的答案 (
rsync --dry-run -av --prune-empty-dirs --exclude '*.meta.json' --include '*.json' photos/ photos-copy/
) 输出试了一下:说明:在 rsync 中包含/排除重要的顺序。包括所有子目录 1st。排除 meta.json,包括 .json,并排除任何其他内容。