Verifique a existência de arquivos antes de agir sobre eles

2

Em um de meus processos, verifico a existência de arquivos com mais de 31 dias e depois faço o mesmo com eles.

find /my/directory/*txt -mtime +31 -exec ls -l {} \;

Tudo isto está bem e bem, se os arquivos estiverem em /my/directory/ , mas quando não houver arquivos presentes, recebo um erro:

find: '/my/directory/*txt': No such file or directory

Se eu emitir:

touch /my/directory/a_new_file.txt

e execute o mesmo comando novamente

find /my/directory/*txt -mtime +31 -exec ls -l {} \;

Não há erros.

Existe uma maneira de verificar se os arquivos existem em um diretório antes de tentar qualquer trabalho neles?

    
por a coder 19.11.2013 / 14:07

1 resposta

3

Não é assim que find funciona. O primeiro argumento é um diretório para pesquisar (ou um único nome de arquivo). Se você deseja fornecer padrões, use -name ou -iname ou -regex ou opções semelhantes. Por exemplo:

find /my/directory/ -name "*txt" -mtime +31 -ls

Eu também alterei -exec ls {} \; para usar a opção -ls de encontrar o que faz a mesma coisa com mais eficiência.

A única maneira de verificar seria executar um ls ou outro find primeiro e isso parece bobagem para evitar uma mensagem de erro completamente inofensiva.

Se desejar, você também pode especificar que está procurando um arquivo normal, sem diretórios, etc., usando -type :

find /my/directory/ -type f -name "*txt" -mtime +31 -ls

Isso localizará todos os arquivos .txt , incluindo aqueles nos subdiretórios de /my/directory , se não for o que você deseja, especifique uma profundidade máxima:

find /my/directory/ -maxdepth 1 -type f -name "*txt" -mtime +31 -ls
    
por 19.11.2013 / 14:25