Como criar um zip de diretórios -mtime -150

2

Eu quero zipar os diretórios, sub-diretórios, arquivos nos principais e subdiretórios de hoje até 150 dias atrás.

Considero apenas a data dos diretórios em que estou executando o comando, independentemente da data dos arquivos e subdiretórios.

Eu usei o comando

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

para criar o zip de diretórios. Mas está criando o zip de arquivos / subdiretórios que só são modificados entre 150 dias a partir de hoje. Alguém poderia me ajudar.

    
por mamatha 18.07.2015 / 08:42

1 resposta

1

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 o find 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 try

    find . -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 e xargs -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 execute zip a few times.  This shouldn’t be a problem, as

zip myarc file1 file2
zip myarc file3 file4

should result in myarc.zip containingfile1, file2, file3, and file4, because zip normally adds to existing archives, rather than clobbering them and overwriting them.  But note, by the same argument, that you should ensure that tnsd3801_Postfeb16_7106.zip does not exist before you issue the above command, unless you want to add to its pre-existing contents.

    
por 26.07.2015 / 02:19