I'm only interested in comparing filenames.
Em seguida, evite qualquer ferramenta que compare o conteúdo dos arquivos, pois isso só retardará o processo.
O que está ocorrendo agora para comparar os nomes de arquivos nos dois diretórios e gerar apenas os nomes comuns é:
comm -12 <(cd dir1; stat -c '%n' *) <(cd dir2; stat -c '%n' *)
-
comm -12 <([...]) <([...]): irá comparar a saída de[...]e[...]output apenas as linhas presentes em ambos os arquivos; -
cd dirN; stat -c '%n' *mudará o diretório de trabalho atual paradirNe mostrará uma lista ordenada dos nomes de arquivo dos arquivos nele contidos.
% tree
.
├── dir1
│ ├── file1
│ ├── file2
│ └── file3
└── dir2
└── file1
2 directories, 4 files
user@user-X550CL ~/tmp % comm -12 <(cd dir1; stat -c '%n' *) <(cd dir2; stat -c '%n' *)
file1
Se você precisar lidar com novas linhas em nomes de arquivos, use isso:
sort -z <(cd dir1; stat --printf '%n% tree
.
├── dir1
│ ├── file1
│ ├── file2
│ └── file3
└── dir2
└── file1
2 directories, 4 files
% sort -z <(cd dir1; stat --printf '%ncomm -12 <(cd dir1; stat -c '%n' *) <(cd dir2; stat -c '%n' *)
' *) <(cd dir2; stat --printf '%n% tree
.
├── dir1
│ ├── file1
│ ├── file2
│ └── file3
└── dir2
└── file1
2 directories, 4 files
user@user-X550CL ~/tmp % comm -12 <(cd dir1; stat -c '%n' *) <(cd dir2; stat -c '%n' *)
file1
' *) | uniq -zd | tr 'sort -z <(cd dir1; stat --printf '%n% tree
.
├── dir1
│ ├── file1
│ ├── file2
│ └── file3
└── dir2
└── file1
2 directories, 4 files
% sort -z <(cd dir1; stat --printf '%n%pre%' *) <(cd dir2; stat --printf '%n%pre%' *) | uniq -zd | tr '%pre%' '\n'
file1
' *) <(cd dir2; stat --printf '%n%pre%' *) | uniq -zd | tr '%pre%' '\n'
' '\n'
file1
' *) <(cd dir2; stat --printf '%n%pre%' *) | uniq -zd | tr '%pre%' '\n'
-
sort -z <([...]) <([...]): se juntará e classificará a saída de[...]e[...]; -
cd dirN; stat -c '%n' *mudará o diretório de trabalho atual paradirNe mostrará uma lista ordenada dos nomes dos arquivos contidos nele; -
uniq -zd: imprimirá apenas linhas duplicadas; -
tr '%code%' '\n'irá substituir caracteres NUL por novas linhas.