Kiw*_*iwy 7 users find zip aix
我喜欢 zip,它很简单,但最近我只需要将一个用户拥有的文件压缩到一个目录中。
我阅读了手册,但找不到任何选项来执行以下操作:
zip /tmp/file.zip -own antoine -r /usr/something/*
Run Code Online (Sandbox Code Playgroud)
我是否错过了该选项,或者可能使用其他存档标准格式(尽管我在 AIX 上工作,但我愿意接受建议,并且可能会错过一些选项或二进制文件)
Ant*_*hon 11
您可以尝试使用以下命令查找相关文件find
:
find /usr/something -maxdepth 1 -user antoine
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用-exec
以下结果创建一个 zip 文件find
:
find /usr/something -maxdepth 1 -user antoine -exec zip /tmp/file.zip {} +
Run Code Online (Sandbox Code Playgroud)
如果要递归,请省略 maxdepth。
与zsh
:
zip mine.zip ./*(.U)
Run Code Online (Sandbox Code Playgroud)
压缩我的(常规)文件。
zip antoine.zip ./*(.u:antoine:)
Run Code Online (Sandbox Code Playgroud)
拉链安托万的
仅使用 AIX 或其他 POSIX 和几乎没有更多系统上可用的功能:
find /usr/something/* /usr/something/.[!.]* /usr/something/..?* \
-prune -type f -user antoine -exec zip -r /tmp/file.zip {} +
Run Code Online (Sandbox Code Playgroud)
find
递归到子目录。为了避免这种情况,-prune
告诉它不要进入它遇到的目录。如果我跑步find /usr/something -type d -prune -o …
,那/usr/something
可不好,因为那样会被跳过。所以我find
在该目录中的所有条目上运行,除了.
和..
。
一个更简单的习惯用法是切换到目录并.
特殊对待起始目录。在这里,它将更改生成的存档,该存档的路径为表单./foo
而不是usr/something/foo
. 这种技术依赖于这样一个事实,即-name .
只匹配起始目录,每个其他遇到的文件都有自己的名称。
cd /usr/something &&
find . ! -name . -prune -type f -user antoine -exec …
Run Code Online (Sandbox Code Playgroud)
请注意,zip
如果文件名列表对于单个调用来说太长,则可能会执行多次。这没问题,因为zip -r
替换了存档中的现有文件;如果您使用另一个归档器,请注意不要在会创建新归档的模式下调用它(例如,不要使用tar -c
)。