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 ofinda 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 dirs151to make sure which one you want.
-
find … -prunediz: 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 –prunena estrutura de diretório de exemplo que mostrei acima deve relatar
./dir1 ./dir2/dir21 ./dir2/dir23 ./dir2/dir25 ./dir2/dir27Não lista
./dir1/dir12,./dir1/dir14e./dir1/dir16, porque não está pesquisando./dir1, porque foi modificado há menos de 150 dias. - Use
-print0exargs -0para manipular nomes de diretórios que pode ter caracteres em branco (espaços, tabulações e novas linhas) em seus nomes. - Em seguida, invoque
zipcom a opção-rpara 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,
xargsmight need to executezipa few times. This shouldn’t be a problem, aszip myarc file1 file2 zip myarc file3 file4should result in
myarc.zipcontainingfile1,file2,file3, andfile4, becausezipnormally adds to existing archives, rather than clobbering them and overwriting them. But note, by the same argument, that you should ensure thattnsd3801_Postfeb16_7106.zipdoes not exist before you issue the above command, unless you want to add to its pre-existing contents.