basename
opera em seu argumento de linha de comando, ele não lê da entrada padrão.
Você não precisa chamar o utilitário basename
, e é melhor não: tudo o que ele faria seria remover a parte antes do último /
, e seria lento chamar um comando externo para cada entrada, você pode usar um utilitário de processamento de texto.
find ~ -type f | sed 's!.*/!!' | sort | uniq -d
Pode ser mais útil acompanhar a localização dos arquivos. A classificação por nome facilita a localização de duplicados, mas sort
não tem a opção de usar o último campo. O que você pode fazer é copiar o último campo /
-separated para o início, depois classificar e usar um pouco de processamento ad hoc awk para extrair e apresentar as duplicatas.
find ~ -type f |
sed 's!.*/\(.*\)!/&!' | # copy the last field to the beginning
sort -t/ -k1,1 |
cut -d/ -f2- | # remove the extra first field (could be combined with awk below)
awk -F / '{
if ($NF == name) {
if (previous != "") {print previous; previous = ""}
print
} else {
previous = $0
name = $NF
}
'
(Note que eu suponho que nenhum dos seus nomes de arquivo contém caracteres de nova linha.)