Dentro de um determinado diretório no ambiente linux, eu preciso escolher todos os arquivos modificados após uma certa data (digamos 7 dias) assim como todos os diretórios (somente em diretório raiz, portanto não recursivamente) criado após a mesma data.
Depois disso, eu tenho que cuidar de 3 diretórios, exceto a última regra dada. Para estes, o processo tem que ser recursivo dentro de cada um deles. Em um desses diretórios, há um arquivo a ser excluído, não importa o quê.
Finalmente, tenho que adicionar todos os objetos correspondentes a esses padrões em um único arquivo .tar.
Cada arquivo / diretório deve manter o caminho relativo completo dentro do arquivo .tar (a partir do diretório base).
Então, vamos supor que temos:
myHome
|-- normalDir1 // older than 7 days
| |-- blah.txt
| |-- to_be_excluded_nmw.txt // should never be included anyways
| '-- poems.txt
|-- normalDir2 // created yesterday
| |-- blah2.txt /*
| |-- whatever2.txt * Since it's a normal directory,
| |-- whatever3.txt * I want to exclude these files from .tar
| '-- poems2.txt */
|-- exceptionDirectory1 // older than 7 days
| |-- actions // older than 7 days
| | '-- power.sh // older than 7 days
| '-- events // older than 7 days
| |-- deploy.php // older than 7 days
| '-- set.php // older than 7 days
|-- exceptionDirectory2 // older than 7 days
| |-- actions2
| | '-- power2.sh // created yesterday
| '-- events2 // older than 7 days
| |-- deploy2.php // created yesterday
| '-- set2.php // older than 7 days
|-- file_to_be_updated.php // created yesterday
'-- file_NOT_to_be_updated.php // older than 7 days
o resultado .tar deve conter:
./normalDir2/
./exceptionDirectory2/actions2/power2.sh
./exceptionDirectory2/events2/deploy2.php
./file_to_be_updated.php
Eu criei este script:
#!/bin/bash
TODAY='date --rfc-3339=date'
FILENAME=$TODAY-package.tar
find ./require ! -name db_connection.php ! -path ./require -mtime -7 -print | xargs tar cvf 'date --rfc-3339=date'-package.tar
find ./img ! -path ./img -mtime -7 -print | xargs tar uvf 'date --rfc-3339=date'-package.tar
find ./plugin ! -path ./plugin -mtime -7 -print | xargs tar uvf 'date --rfc-3339=date'-package.tar
find . -maxdepth 1 ! -name $TODAY-package.tar.gz ! -path . -mtime -7 -print | xargs tar uvf 'date --rfc-3339=date'-package.tar
mas parece que não funciona corretamente, pois sai quase imediatamente com este erro:
tar: ./img: Impossibile open: Is a directory
Observe que "require", "img" e "plugin" são os três diretórios especiais a serem tratados recursivamente.
O que há de errado com o roteiro? Obrigado pela sua ajuda.