Bash 存档早于x天的文件

Bash 存档早于x天的文件,bash,unix,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

我想将所有文件(一个.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 answer之后还有一个问题:仍然有许多文件丢失,请查看屏幕截图


可能是冒号(:)导致了问题?

-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

不,结果是一样的。只有最后一个文件被添加到存档中,请检查下面的答案。显然,您使用了问题中的脚本。当然我想让你使用答案中的脚本。@RuudHelderman我第一次尝试了,结果是一样的。很好的发现,谢谢!很有魅力。我以为没关系,但事实并非如此。请检查编辑过的问题好吗?自行运行
find
命令,确保选中了所需的文件。然后在创建文件时,将
v
选项放在
tar
命令上,确保所需文件在进入tar时列出。然后运行
tartv
,在完成后列出内容。文件丢失的步骤是什么?当我运行tar-czvPf时,我看到在创建归档文件时列出了所有文件。一件非常有趣的事情:~/home/xml/$find./-->正在工作~/home/xml$find/home/xml/-->不工作。好的,几个小时后我发现了问题。我想我已经达到了xargs最大命令长度的上限。我添加了xargs-s2092413,现在看起来工作正常。