Quanto mais eu leio essa pergunta, menos tenho certeza de que a entendo. Eu vou assumir que é como segue: Você tem uma árvore de diretórios que se parece com
. ├───dir1 ⋯ Modified 140 days ago. │ ├───dir11 ⋯ Modified 160 days ago. │ ├───dir12 ⋯ Modified 140 days ago. │ ├───dir13 ⋯ (Don’t care.) │ ├───dir14 ⋯ (Don’t care.) │ ├───dir15 . │ ├───dir16 . │ ├───dir17 . │ └─── ⋮ └───dir2 ⋯ Modified 160 days ago. ├───dir21 ⋯ Modified 140 days ago. ├───dir22 ⋯ Modified 160 days ago. ├───dir23 ⋯ Modified 140 days ago. ├───dir24 ⋯ Modified 160 days ago. ├───dir25 ⋯ Modified 140 days ago. ├───dir26 ⋯ Modified 160 days ago. ├───dir27 ⋯ Modified 140 days ago. └─── ⋮ ⋮
... e você deseja arquivar
tudo em e abaixo de dir1
(incluindo tudo
em dir11
, dir12
, dir13
, dir14
, dir15
, dir16
e dir17
),
e tudo em e abaixo de dir21
, dir23
, dir25
e dir27
,
mas nada mais dentro ou abaixo de dir2
. (Porque você quer tudo
em qualquer diretório que tenha sido modificado nos últimos 150 dias.)
Você pode fazer isso com
find . -type d -mtime -151 -prune -print0 | xargs -0 zip -r tnsd3801_Postfeb16_7106.zip
-
find . -type d
, obviamente encontra diretórios dentro e sob o diretório atual. -
find … -mtime -151
, como você sabe restringe ofind
a objetos cuja data de modificação é de 150 dias atrás ou menos.When I read your question, my first thought was
-mtime -150
. Then I saw that you were trying-mtime -151
, and I thought, yeah, that makes sense. Still, you might want to tryfind . -type d -mtime -150 > dirs150 find . -type d -mtime -151 > dirs151 diff dirs150 dirs151
to make sure which one you want.
-
find … -prune
diz: quando você encontrar algo que atenda aos critérios especificados até este ponto, não invista neste diretório, mas apenas prossiga para o próximo objeto neste nível. Então,find . -type d -mtime -151 –prune
na estrutura de diretório de exemplo que mostrei acima deve relatar
./dir1 ./dir2/dir21 ./dir2/dir23 ./dir2/dir25 ./dir2/dir27
Não lista
./dir1/dir12
,./dir1/dir14
e./dir1/dir16
, porque não está pesquisando./dir1
, porque foi modificado há menos de 150 dias. - Use
-print0
exargs -0
para manipular nomes de diretórios que pode ter caracteres em branco (espaços, tabulações e novas linhas) em seus nomes. - Em seguida, invoque
zip
com a opção-r
para fazer com que ele pesquise os diretórios especificados recursivamente.
Note: If you have a lot of directories, i.e., so many that the list of their names is hundreds of thousands of characters long,
xargs
might need to executezip
a few times. This shouldn’t be a problem, aszip myarc file1 file2 zip myarc file3 file4
should result in
myarc.zip
containingfile1
,file2
,file3
, andfile4
, becausezip
normally adds to existing archives, rather than clobbering them and overwriting them. But note, by the same argument, that you should ensure thattnsd3801_Postfeb16_7106.zip
does not exist before you issue the above command, unless you want to add to its pre-existing contents.