编写命令管道 (Unix)

Write a command pipeline (Unix)

我做了几次尝试来解决以下问题:

Write a command pipeline to find files in a directory hierarchy (e.g my home directory) that have not been accessed for 30 days and compress them.

谁能解释一下我在下面做错了什么,我是 unix 新手:

find ~ -type f -atime +30 -exec gzip -cv test

顺便说一句,这是我遇到的错误:

find: paths must precede expression: gzip
Usage: find [-H] [-L] [-P] [-Olevel] [-D] help|tree|search|stat|rates|opt|exec] [path...] [expression]

在最后添加{} \;

  1. 如果你想就地压缩文件,不要使用-c标志;改为写入标准输出。

    find ~ -type f -atime +30 -exec gzip -v {} \;
    
  2. 如果要将文件打包成一个 tar 球,请使用 tar 而不是 gzip。还要将 \; 更改为 + 以将所有文件传递给单个 tar 命令,而不是将每个文件分别 运行 tar。 (请注意,这仅适用于 GNU find,它在 Linux 上很好,但可能不适用于其他没有 GNU 工具集的 UNIX 版本。)

    find ~ -type f -atime +30 -exec tar -cvf files.tar.gz {} +
    

请注意,严格来说,这些不是管道。没有|。你的教授可能希望你以不同的方式解决这个问题。如果是这样,我会把它作为练习留给你解决。