Estou executando o Mac OSX e tentando usar a linha de comando para encontrar o número de arquivos que tenho com o mesmo nome.
Eu tentei usar o seguinte comando:
find ~ -type f -name "*" -print | basename | sort | uniq -d > duplicate_files
Isso não funciona! Quando eu faço o seguinte:
find ~ -type f -name "*" -print > duplicate_files
Então duplicate_files contém os caminhos de todos os meus arquivos. Então eu acho que o problema é com basename
- ele não aceita entrada padrão. Eu tentei o seguinte:
basename $(find ~ -type f -name "*" -print) > duplicate_files
mas, novamente, isso não parece funcionar. A pesquisa na internet parece não render muita alegria. Quaisquer pensamentos muito bem-vindos.
Por que não usar
find
recursos internos para gerar apenas o nome do arquivo:(assume o GNU
find
) ou pelo menos algo parecido com isto:basename
não pode ler via canal ou processar vários arquivos de uma só vez.ps. Não há necessidade de especificar
-name '*'
se você deseja listar todos os arquivos. Esta é uma opção padrão.fonte
basename: unknown primary or operator
. Obrigado pela dica sobre-name "*"
-printf
até na página do manual do posix. Sobre o erro da segunda maneira, é causa de erro de digitação na minha resposta. Fixo. Você poderia tentar mais uma vez?-printf
eu recebo o-printf: unknown primary or operator
. Além disso, quando eu verifiquei o Unix em um livro de referência Nutshell ele lista como uma opção de GNU / Linux - não diz nada sobre OSXman find
no seu console :) #Isso parece funcionar para mim no OSX:
fonte
+
significa o comando?-a
opção de cobertura para esse caso também.Alternativas (não assume nova linha nos nomes dos arquivos):
fonte
Você pode usar
xargs
combasename
para obter a saída desejada, assim:fonte
Com uma versão recente
bash
que lida com matrizes associativas, os itens a seguir também lidam com nomes de caminho com novas linhas incorporadas:Isso não usa utilitário externo.
fonte