Se os nomes dos seus diretórios não contiverem espaços, você pode fazer:
find . -type d -printf '%f\n' |
perl -lne '/.{1,5}/; push @{$k{$&}},$_;
END{
map{print if scalar(@{$k{$_}})>1}keys(%k)
}' > results.txt
Isso localizará todos os subdiretórios do diretório atual e imprimirá seus nomes ( -printf '%f\n'
, isso assume o find
supports printf
). O script perl
usa os primeiros 5 caracteres de cada nome e os usa como chaves para um hash de matrizes cujos valores são os nomes dos diretórios. Em seguida, quaisquer nomes de nomes encontrados mais de uma vez serão impressos.
Se os nomes de seus diretórios puderem conter novas linhas, você poderá ad BEGIN{$/="%code%"}
no início do script Perl:
find . -type d -printf '%ffind . -type d -printf '%f\n' |
perl -lne '/.{1,5}/; push @{$k{$&}},$_;
END{
map{print if scalar(@{$k{$_}})>1}keys(%k)
}' > results.txt
' |
perl -lne 'BEGIN{$/="find . -type d -printf '%f%pre%' |
perl -lne 'BEGIN{$/="%pre%"} /.{1,5}/; push @{$k{$&}},$_;
END{
map{print if scalar(@{$k{$_}})>1}keys(%k)
}' > results.txt
"} /.{1,5}/; push @{$k{$&}},$_;
END{
map{print if scalar(@{$k{$_}})>1}keys(%k)
}' > results.txt