压缩和删除具有特定年龄的文件

时间:2013-10-10 17:19:49

标签: linux find backup

我正在尝试详细说明一个命令,该命令将查找超过6个月内未修改过的文件,并使用一个命令对其进行压缩。之后我想删除所有这些文件,我刚刚存档。

我当前查找包含文件的目录的命令是

find /var/www -type d -mtime -400 ! -mtime -180 | xargs ls -l > testd.txt

这给了我所有目录,包括超过6个月的文件 现在我想知道是否有办法压缩所有结果并在之后删除它们。

之类的东西
find /var/www -type f -mtime -400 ! -mtime -180 | gzip -c archive.gz

如果有人知道实现这一目的的正确语法,我很想知道。 Thakns!

编辑,经过几次测试后,此命令会导致文件损坏

find /var/www -mtime -900 ! -mtime -180 | xargs tar -cf test4.tar

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

将其分解为几个不同的步骤,您可以实施并分别进行彻底测试:

  1. 构建要归档然后删除的文件列表,保存到临时文件
  2. 使用步骤1中的列表将文件添加到.tar.gz档案。为存档文件指定一个特定模式的名称,该模式不会出现在要存档的文件中,并将其放在要存档的文件层次结构之外的目录中。
  3. 回读.tar.gz中的文件,并将它们(或它们的哈希值)与原始文件进行比较,以确保所有文件都没有损坏
  4. 使用步骤1中的列表删除文件。不要使用通配符进行删除。添加一些保护代码,以防止删除与步骤2中创建的存档.tar.gz文件的名称模式匹配的任何文件。
  5. 在测试可能造成不可逆转损坏的脚本时,始终使用前导echo对危险命令进行编码并保持这种状态,直到您确定一切正常为止。然后才删除echo

答案 1 :(得分:0)

考虑zip,它应该符合您的要求。

find ... | zip -m@ archive.zip 
  

-m(move)在创建指定的zip存档后删除输入的目录/文件。

     

- @从标准输入中获取输入文件列表。

您可以在zip手册中找到更多对您有用的选项,例如:克。

  

-r(recurse)以递归方式传递目录结构。

     

-sf(show-files)显示将要操作的文件,然后退出。

     

-t或--from-date对未在指定日期之前修改的文件进行操作。

     

-tt或--before-date对未在指定日期之后或之后修改的文件进行操作。

这可能会导致find消耗殆尽。

zip -mr --from-date 2012-09-05 --before-date 2013-04-13 archive /var/www