想象一下像这样的文件夹结构:
在每个子文件夹中都有文件和更多带文件/文件夹的子文件夹。我有兴趣压缩名为'archive'的子文件夹中的所有文件,并忽略结构中的所有其他文件夹。
如果我使用命令:find * -type d -name 'archive'
输出将如下:
我感兴趣的是输出如下:
依此类推,以便我可以使用指挥官:find * -type d -name 'archive' [with some more/other options] | zip all_archive_files.zip -@
如何做到这一点?
答案 0 :(得分:2)
您可以使用-path
或regex
匹配整个路径:例如
find . -regex './[0-9]+/archive/.*' -type f -exec zip all.zip {} \;
答案 1 :(得分:1)
这很粗糙,但你可以:
find . -type d -name 'archive' -exec find {} \; | zip stuff.zip -@
答案 2 :(得分:1)
运行zip
的正常方式是从命令行获取文件名,并使用-r
标志命令将自己递归到目录中。考虑
find . -name 'archive' -type d -exec zip -r all_archive_files.zip {} +
-exec
选项将运行zip -r all_archive_files.zip ...
,其中...
将替换为find
找到的所有文件的列表。在echo
和-exec
之间使用zip
运行它,看看它会做什么:
$ find . -name 'archive' -type d
411/archive
412/archive
488/archive
512/archive
$ find . -name 'archive' -type d -exec echo zip -r all_archive_files.zip {} +
zip -r all_archive_files.zip 411/archive 412/archive 488/archive 512/archive