Como faço para duplicar duplicatas de impressão?

3

Estou tentando descobrir quais arquivos estão presentes em duas pastas comparadas. Estou interessado apenas em comparar nomes de arquivos.

Adicionar -s ao comando não funciona por algum motivo. Eu quero reutilizar a lista para excluir duplicatas e excluir as linhas dizendo "somente em" é uma perda de tempo.

Comando:

diff -s /folder1/folder1 /folder2/folder2

Saída:

Only in /folder1/folder1: sth.pdf
Only in /folder1/folder1: sth.png
Only in /folder1/folder1: sth.txt
Files /folder1/folder1/sthe.txt and /folder2/folder2/sthe.txt are identical
Only in /folder1/folder1: sth.pdf
Only in /folder1/folder1: sth.png
Only in /folder1/folder1: sth.txt
.
.
.

Alguma sugestão?

    
por treakec 18.03.2016 / 11:48

1 resposta

2

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 para dirN 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 '%n
comm -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 para dirN 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.
%pre%     
por kos 18.03.2016 / 12:03