0

我正在尝试详细说明一个命令,该命令将查找超过 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

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

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

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

有任何想法吗?

4

2 回答 2

1

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

  1. 建立要归档然后删除的文件列表,保存到临时文件
  2. 使用步骤 1 中的列表将文件添加到 .tar.gz 档案。为存档文件指定一个特定模式的名称,该名称不会出现在要存档的文件中,并将其放在要存档的文件层次结构之外的目录中。
  3. 从 .tar.gz 读回文件并将它们(或它们的哈希值)与原始文件进行比较,以确保您得到所有​​文件而没有损坏
  4. 使用步骤 1 中的列表删除文件。不要使用通配符进行删除。放入一些保护代码以防止删除与步骤 2 中创建的存档 .tar.gz 文件的名称模式匹配的任何文件。

在测试可能造成不可逆转损害的脚本时,请始终使用前导对危险的命令进行编码echo并保持原样,直到您确定一切正常为止。只有这样才能删除echo.

于 2013-10-10T23:42:59.303 回答
0

考虑一下zip,它应该满足您的要求。

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

-m(移动)在制作指定的 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
于 2014-09-23T07:27:14.103 回答