com zsh
:
typeset -A files
for f (**/*(D.oL)) files[$f:t]=$f
printf '%s\n' $files
Funcionaria com quaisquer bytes ou caracteres (como espaço, nova linha ...) que os nomes de arquivo possam conter.
Com ferramentas GNU:
find . -type f -printf '%s/%f/%Pallfiles=(**/*(D.oL))
typeset -A best
for f ($allfiles) best[$f:t]=$f
bestfiles=($best)
dups=(${allfiles:|bestfiles})
rm -rf -- $dups
' |
sort -zrn |
LC_ALL=C sort -zt/ -uk2,2 |
tr 'typeset -A files
for f (**/*(D.oL)) files[$f:t]=$f
printf '%s\n' $files
\n' '\nfind . -type f -printf '%s/%f/%Pallfiles=(**/*(D.oL))
typeset -A best
for f ($allfiles) best[$f:t]=$f
bestfiles=($best)
dups=(${allfiles:|bestfiles})
rm -rf -- $dups
' |
sort -zrn |
LC_ALL=C sort -zt/ -uk2,2 |
tr '%pre%\n' '\n%pre%' |
cut -d/ -f3- |
tr '%pre%' '\n'
' |
cut -d/ -f3- |
tr '%pre%' '\n'
Se você quiser remover as duplicatas, com zsh
:
Descrição de alguns recursos do zsh:
-
typeset -A best
: declara uma variável de matriz associativa como em ksh93. Versões recentes debash
também o suportam. -
**/*
: globalização recursiva. Introduzido por zsh no início dos anos noventa, agora encontrado em algumas outras conchas com variações. -
(D.oL)
: qualificadores de globbing. Outra invenção, ainda não copiada por outras conchas, é uma companheira essencial para a globalização recursiva. Usado para qualificar ainda mais o glob.D
para incluir arquivos de pontos,.
para incluir apenas arquivos regulares ,oL
para ordenar por tamanho (tamanho em bytes). -
${file:t}
: como em (t) csh, expande para a parte tail de um nome de arquivo (o nome da base). -
${a:|b}
expande para os elementos dea
que não estão emb
. ( a - b ).