Como encontrar pastas do Mac que não possuem um arquivo específico

0

Existe uma maneira de verificar pastas no seu Mac por um item ausente?

Digamos que eu queira verificar meu disco rígido externo e encontrar todas as pastas com uma determinada palavra no título, que estão faltando no arquivo Data.log ?

Qual seria a maneira mais fácil de fazer isso, ou é possível?

    
por Homework 30.09.2010 / 19:37

2 respostas

3

Usando a ótima resposta do @Nifle, mas incluindo seus detalhes, tente:

% find /Volumes/WD -type d -name *[TEST]* | while read a; do if [ ! -f $a/Data.log ]; then echo $a; fi; done  

Quebrando este verso:

  • find /Volumes/WD -type d -name *[TEST]* : Anda na árvore de arquivos de /Volumes/WD em seu HD externo procurando diretórios ( -type d ) que têm [TEST] em algum lugar em seu nome ( -name *[TEST]* ).

  • A saída do comando find é canalizada (por | ) para o loop bash while , que extrai os diretórios correspondentes um por vez, armazenando-os em uma variável a .

  • Dentro do loop:

    • A instrução if verifica se o arquivo Data.log não está no diretório que está sendo considerado. Na instrução if , $a é expandido para que $a/Data.log seja um caminho como /Volumes/WD/<dir1>/<dir2>/Data.log . Para obter o teste, você está interessado em ! e -f , de forma que apenas casos em que não exista um arquivo com esse nome serão avaliados como TRUE ( ! is NOT e -f indica um arquivo em vez de qualquer outro tipo de entrada no sistema de arquivos, como diretórios ou links).
    • Finalmente, se encontrarmos um diretório correspondente, ele será impresso por echo $a , em que $a será substituído, conforme acima, pelo nome do diretório canalizado de find .

Eu sei que estou refazendo uma resposta anterior, mas espero que isso esclareça o que está acontecendo no grande one-liner apresentado pela @Nifle e resolva seu problema.

    
por 30.09.2010 / 20:37
1

Isso deve fazer o truque, executá-lo em um shell.

find /Volumes/WD/ -type d -name '*TEST*' | while read a; do if [ ! -f $a/Data.log ]; then echo $a; fi; done;
    
por 30.09.2010 / 19:55