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 paradirN
e 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 paradirN
e 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.