script BASH para procurar arquivos em pastas de 4 dígitos e mais de 7 dias

0
#!/bin/bash

unset result
result=$(find /home -path "$HOME/TestDir/[0-9][0-9][0-9][0-9]/test*" -mtime -7 -print -delete 2>/dev/null)
[ "$result" ] || echo "There are no recovery files older than 7 days"

Na parte /test , preciso encontrar dois nomes de arquivos. Aqueles que começam com E* e aqueles que começam com P_* . isso pode ser feito?

    
por eekfonky 24.07.2015 / 09:18

2 respostas

0
find $(find -name "[0-9][0-9][0-9][0-9]") -name "[test]*" -mtime -7 -exec rm -i {} \; || echo "There are no recovery files older than 7 days"

O operador || ( ou ) examina o resultado do comando à sua esquerda e executa o comando à direita apenas se o comando à esquerda falhar (com base no código de retorno ).

Se a localização não encontrar nenhum arquivo correspondente, ele retornará 1, o que fará com que || execute o comando echo .

    
por 24.07.2015 / 09:38
1

De man find

EXIT STATUS
find exits with status 0 if all files are processed successfully, greater than 0 if errors occur. This is deliberately a very broad description, but if the return value is non-zero, you should not rely on the correctness of the results of find

Assim, se não houver arquivos correspondentes, o status de saída permanecerá 0. Portanto, é melhor verificar se a saída está vazia:

unset result
result=$(find ~/TestDir -path "$HOME/TestDir/[0-9][0-9][0-9][0-9]/test*" -mtime -7 -print -delete 2>/dev/null)
[ "$result" ] || echo "There are no recovery files older than 7 days"
    
por 24.07.2015 / 10:17