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
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.
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. [: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' .