如何只压缩特定用户的文件?

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。


Sté*_*las 6

zsh

zip mine.zip ./*(.U)
Run Code Online (Sandbox Code Playgroud)

压缩我的(常规)文件。

zip antoine.zip ./*(.u:antoine:)
Run Code Online (Sandbox Code Playgroud)

拉链安托万的


Gil*_*il' 6

仅使用 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)。