存档超过x天的文件

时间:2017-07-03 18:24:13

标签: bash unix

我想将目录中的所有文件(到一个.tar.gz文件)存档,当它们超过X天时。

我有这个班轮:

find /home/xml/ -maxdepth 1 -mtime +14 -type f -exec sh -c \ 'tar -czvPf /home/xml/archive/archive_$(date +%F).tar.gz $0' {} \;

当我运行此命令时,我看到在此目录中选择了正确的文件,但在存档中只是最后一个文件。有没有办法将所有文件都放到一个tar.gz存档中?

@Alex回答之后还有一个问题:还有很多文件丢失,请查看屏幕截图。

enter image description here 也许冒号(:)导致问题?

1 个答案:

答案 0 :(得分:2)

-exec为所选的每个文件运行命令,因此它编写了一个包含一个文件的tar,然后为每个源文件覆盖它,这就解释了为什么你只得到了最后一个。您可以使用find生成所需的文件列表,然后通过xargs管道传递列表,就好像它们是tar命令的参数一样:

find /home/xml/ -maxdepth 1 -mtime +14 -type f | xargs tar -czvPf /home/xml/archive/archive_$(date +%F).tar.gz

带冒号的文件名对我来说很好用:

% dd if=/dev/urandom of=one:1 count=1
% dd if=/dev/urandom of=two:2 count=1
% dd if=/dev/urandom of=three:3 count=1
% dd if=/dev/urandom of=four:4 count=1
% dd if=/dev/urandom of=five:5 count=1
% find . -type f | xargs tar cvf foo.tar
    ./five:5
    ./four:4
    ./two:2
    ./three:3
    ./one:1
% tar tvf foo.tar
    -rw------- alex/alex       512 2017-07-03 21:08 ./five:5
    -rw------- alex/alex       512 2017-07-03 21:08 ./four:4
    -rw------- alex/alex       512 2017-07-03 21:08 ./two:2
    -rw------- alex/alex       512 2017-07-03 21:08 ./three:3
    -rw------- alex/alex       512 2017-07-03 21:08 ./one:1