编写命令管道(Unix)

时间:2015-02-05 00:06:27

标签: shell unix find

我做了一些尝试来解决以下问题:

  

编写命令管道以查找目录层次结构(例如我的主目录)中30天未访问的文件并压缩它们。

有人可以在下面解释我做错了什么,我是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 个答案:

答案 0 :(得分:2)

{} \;添加到最后。

  1. 如果要压缩文件,请不要使用-c标志;而是写入stdout。

    find ~ -type f -atime +30 -exec gzip -v {} \;
    
  2. 如果要将文件捆绑到tarball中,请使用tar代替gzip。同时将\;更改为+以将所有文件传递给单个tar命令,而不是为每个文件单独运行tar。 (注意这只适用于GNU find,这在Linux上很好,但可能不适用于没有GNU工具集的其他UNIX版本。)

    find ~ -type f -atime +30 -exec tar -cvf files.tar.gz {} +
    
  3. 请注意,严格来说,这些不是管道。没有|。您的教授可能会打算以不同的方式解决这个问题。如果是这样的话,我会将其作为练习让你解决。