我想压缩从今天到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 天内修改过的任何目录中及其下的所有内容。)dir11
dir12
dir13
dir14
dir15
dir16
dir17
dir21
dir23
dir25
dir27
dir2
你可以这样做
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 天。- 使用
-print0
和xargs -0
来处理名称中可能包含空白字符(空格、制表符和换行符)的目录名称。 - 然后
zip
使用-r
选项调用以使其递归搜索指定目录。
注意:如果您有很多目录,即目录名称的列表有数十万个字符长,
xargs
可能需要执行zip
几次。这应该不是问题,因为zip myarc file1 file2 zip myarc file3 file4
应该导致
myarc.zip
包含file1
,file2
,file3
, 和file4
, 因为zip
通常添加现有的档案,而不是破坏它们并覆盖它们。但请注意,通过相同的论点,您应该确保tnsd3801_Postfeb16_7106.zip
在发出上述命令之前不存在,除非您想添加到其预先存在的内容。