原始输入:
➜ datatest tree
.
├── a
│ ├── README.md
│ ├── code
│ └── data
│ └── apple.csv
├── archive.sh
├── f
│ ├── README.md
│ ├── code
│ └── data
│ ├── Archive.zip
│ ├── a.csv
│ ├── b.xlsx
│ └── c.xlsx
└── toolbox
└── tool.py
7 directories, 9 files
输出:
➜ datatest tree
.
├── a
│ ├── README.md
│ ├── code
│ └── data
│ ├── Archive.zip
│ └── apple.csv
├── archive.sh
├── f
│ ├── README.md
│ ├── code
│ └── data
│ ├── Archive.zip
│ ├── a.csv
│ ├── b.xlsx
│ └── c.xlsx
└── toolbox
└── tool.py
7 directories, 10 files
在每个 /data 子文件夹中,文件应被压缩到Archive.zip
除非它已经存在Archive.zip
(如f
文件夹)。
试:
我必须使用命令行检查是否有Archive.zip
任何子文件夹中没有,然后,这很不方便。/data
tree
zip -r Archive.zip ./*
希望:
如何使用一次命令或编写脚本来实现此目的?我使用的是 OSX(10.12.6)。
答案1
也许是这样的?
find . -type d -name data \
\! -exec test -f {}/Archive.zip ';' \
-execdir zip -rj data/Archive.zip data ';'
这将找到每个data
目录(第一行)。
将\! -exec test -f {}/Archive.zip ';'
过滤掉任何data
不包含任何名为 的文件的目录Archive.zip
。
该行可以替换为\! -execdir test -f data/Archive.zip ';'
.
最后一个将从目录的父目录中-execdir
执行给定的命令。这将创建包含文件(没有附加到存档文件名的路径)。zip
data
data/Archive.zip
data
这类似于我对你上一个问题的回答,但要测试data/Archive.zip
插入的存在性。