Existem ferramentas Linux / Unix que encontram todos os arquivos em um diretório que não estão presentes em outro? Basicamente, estou procurando diff que funciona na saída de ls.
Scripts curtos e doces também são apreciados.
Existem ferramentas Linux / Unix que encontram todos os arquivos em um diretório que não estão presentes em outro? Basicamente, estou procurando diff que funciona na saída de ls.
Scripts curtos e doces também são apreciados.
Respostas:
diff
já faz isso:
diff dir1 dir2
Exemplo de saída:
Only in dir1: some_file.txt
Only in dir1: some_other_file.txt
Only in dir2: third_file.txt
Bater:
diff <(cd dir1; ls) <(cd dir2; ls)
Compare apenas os nomes dos arquivos - não o conteúdo dos arquivos.
ls
, use em find
vez disso!
Se você deseja fazer isso através de todos os subdiretórios também, uma boa maneira de fazer isso é:
diff --brief -r dir1/ dir2/
Eu prefiro usar breve, mas você pode deixar isso de fora, se quiser.
Dennis Williamson teve uma boa resposta , mas eu precisava fazer isso recursivamente. O GNU findutils 4.7.0 não classifica sua saída, então aqui está o que eu usei
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)
Para fazer isso apenas de uma maneira e produzir uma lista de arquivos, usei o seguinte:
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"
Para que isso funcione corretamente, nem $ dir1 nem $ dir2 devem incluir a barra final.
diff dir1 dir2 | grep "Only"