Tentando encontrar todos os arquivos em determinado diretório que não são referenciados em outros arquivos

1

Eu tenho este projeto que tem uma pasta de imagens com imagens e tenho certeza que alguns deles não são usados. Então eu gostaria de listar todas as imagens que não são referenciadas em nenhum outro arquivo. Eu não tenho muita experiência em usar o Terminal, mas é o que eu sei até agora e funciona:

Estar na pasta raiz do projeto.

Para listar todas as imagens (sei que são todas png).

find . -name "*.png" -exec basename {} \;

Para pesquisar em todos os arquivos que não estão em .svn

grep -Iri --exclude-dir=".svn" 'searchTerm' .

Agora estou preso. Meu próximo passo foi tentar canalizar o primeiro comando como searchTerm para o segundo, mas não foi bem sucedido com isso. E de qualquer forma, isso seria quase o oposto do que eu tento fazer. Mas se isso funcionasse, o resultado poderia ser usado para verificar manualmente. Mas o que eu realmente gostaria é apenas listar as imagens que não são referenciadas.

    
por Ivo Beckers 12.06.2015 / 17:53

1 resposta

3

Você poderia fazer:

find . -name '*.png' |
  awk -F/ '{print tolower($NF)}' |
  sort -u > ~/tmp/png-files &&
grep -IhFriof ~/tmp/png-files --exclude-dir=".svn" . | 
  awk '{print tolower($0)}' | sort -u | comm -23 ~/tmp/png-files -

Isso daria a você os nomes minúsculos dos arquivos png que nunca são referenciados.

O primeiro pipeline cria uma lista classificada de nomes de arquivos em minúsculas.

Passamos isso com -f para grep com -F para pesquisa de sequência fixa e -o para exibir apenas o texto correspondente.

A saída disso é classificada e convertida para minúsculas e comparada com nossa lista anterior. Em seguida, relatamos as entradas encontradas somente em nossa primeira lista.

    
por 12.06.2015 / 18:15

Tags