Localizar e ocultar a extensão do arquivo

1

Estou tentando encontrar todos os arquivos com o mesmo nome de arquivo (excluindo a extensão do arquivo) que ocorrem 3 vezes. Eu também preciso do caminho completo para o arquivo.

O que eu tenho atualmente é

#get file without extension
alias lse="ls -1R | sed -e 's/\.[a-zA-Z]*$//'"
#print out the current dir and get files occuring 3 times
lse | sed "s;^;'pwd'/;"  | sort | uniq -c | grep " 3 "

Isso executa howver pwd imprime a pasta em que executei o comando, não o caminho para o arquivo.

Então eu tentei find

find . -type f | sed "s#^.#$(pwd)#" | sort | uniq -c

Isso é executado, mas inclui a extensão do arquivo. Quando tento adicionar sed -e 's/\.[a-zA-Z]*$//'" , recebo erros, pois não tenho certeza de como combinar os dois comandos sed e não consigo transmitir uma segunda vez ao sed?

Então, o que estou tentando fazer é

find . -type f | sed "s#^.#$(pwd)#" | sed -e 's/\.[a-zA-Z]*$//'"| sort | uniq -c | grep " 3 "

mas isso não funciona.

    
por Daveo 11.04.2012 / 07:19

2 respostas

2

qual é o extra "no segundo comando sed fazendo lá?

 /tmp/test $ touch foo.bar foo.baz foo.foo
 /tmp/test $ find . -type f | sed "s#^.#$(pwd)#" | sed -e 's/\.[a-zA-Z]*$//'| sort | uniq -c | grep " 3 "
 3 /tmp/test/foo
    
por 11.04.2012 / 07:46
1

Alterna, mas de forma semelhante, usando alguns outros conceitos:

find . -type f -printf '%f\n' | sed 's/\.[[:alpha:]]*$//' |\
sort | uniq -c | awk '$1==3'

Usos:

  • find -printf para remover diretamente os diretórios principais.
  • a classe de caractere [:alpha:] para definir letras. Isso simula seu exemplo, mas não leva em conta as terminações de arquivo com números (por exemplo, .mp3 ). Altere para [:alnum:] para corresponder letras e números. Procure mais informações sobre as classes de personagens para ver outras possibilidades.
  • awk para imprimir apenas as linhas com a contagem 3 (facilmente alterado para count>=3 , o que parece mais lógico). Como print é a ação padrão, isso pode ser realizado usando apenas awk '$1==3' .
por 11.04.2012 / 10:43

Tags