如何创建目录 zip -mtime -150

如何创建目录 zip -mtime -150

我想压缩从今天到150天前的目录、子目录、主目录和子目录中的文件。

我只考虑运行命令的目录的日期,无论文件和子目录的日期是什么。

我使用了命令

find . -mtime -151 | xargs  zip tnsd3801_Postfeb16_7106.zip

创建目录的 zip。但它正在创建文件/子目录的 zip 文件,这些文件/子目录仅在今天起 150 天内修改。有人可以帮我吗。

答案1

我读这个问题的次数越多,我就越不确定我是否理解它。我假设它如下:你有一个目录树,看起来像


├────dir1⋯  140天前修改。
│ ├───dir11⋯ 160天前修改。
│ ├────dir12⋯  140天前修改。
│ ├────dir13⋯  (不在乎。)
│ ├────dir14⋯  (不在乎。)
│ ├────dir15 .
│ ├────dir16 .
│ ├────dir17 .
│ └─── ⋮
└────dir2⋯ 160天前修改。
    ├────dir21⋯  140天前修改。
    ├────dir22⋯ 160天前修改。
    ├────dir23⋯  140天前修改。
    ├────dir24⋯ 160天前修改。
    ├────dir25⋯  140天前修改。
    ├────dir26⋯ 160天前修改。
    ├────dir27⋯  140天前修改。
    └──── ⋮

...并且您想要归档 中和下的所有内容(包括, , , , , , anddir1中和下的所有内容),以及, , , and中和下的所有内容,但不归档 中或下的其他内容。 (因为您想要在过去 150 天内修改过的任何目录中及其下的所有内容。)dir11dir12dir13dir14dir15dir16dir17dir21dir23dir25dir27dir2

你可以这样做

find . -type d -mtime -151 -prune -print0 | xargs -0 zip -r tnsd3801_Postfeb16_7106.zip
  • find . -type d显然,查找当前目录中及其下的目录。
  • find … -mtime -151如您所知,将 限制find为修改日期为 150 天或更早的对象。

    当我读到你的问题时,我的第一个想法是-mtime -150。然后我看到你在尝试-mtime -151,我想,是的,这是有道理的。不过,您可能想尝试一下

    find . -type d -mtime -150 > dirs150
    find . -type d -mtime -151 > dirs151
    diff dirs150 dirs151
    

    以确定您想要哪一个。

  • find … -prune说,当你找到符合到目前为止指定标准的东西时, 递归到该目录,但继续访问该级别的下一个对象。所以,

    find . -type d -mtime -151 –prune
    

    关于我上面显示的示例目录结构应该报告

    ./dir1
    ./dir2/dir21
    ./dir2/dir23
    ./dir2/dir25
    ./dir2/dir27
    

    它没有列出./dir1/dir12./dir1/dir14、 和./dir1/dir16,因为它没有搜索./dir1,因为它的修改时间不到 150 天。

  • 使用-print0xargs -0来处理名称中可能包含空白字符(空格、制表符和换行符)的目录名称。
  • 然后zip使用-r选项调用以使其递归搜索指定目录。

注意:如果您有很多目录,即目录名称的列表有数十万个字符长, xargs可能需要执行zip几次。这应该不是问题,因为

zip myarc file1 file2
zip myarc file3 file4

应该导致myarc.zip包含file1, file2, file3, 和file4, 因为zip通常添加现有的档案,而不是破坏它们并覆盖它们。但请注意,通过相同的论点,您应该确保tnsd3801_Postfeb16_7106.zip在发出上述命令之前不存在,除非您想添加到其预先存在的内容。

相关内容