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
Existe alguma ferramenta Linux / Unix que encontre todos os arquivos em um diretório não presente em outro? Basicamente eu estou procurando diff que funciona na saída de ls.
Scripts curtos e doces também são apreciados.
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
Bash:
diff <(cd dir1; ls) <(cd dir2; ls)
Compare apenas os nomes dos arquivos - não o conteúdo dos arquivos.
Como as pessoas disseram aqui, você pode usar o DIFF em várias variações de uso. Ou você apenas usa dirdiff
, o que significa o que você está tentando! : -)
Mas se você quiser manter alguns diretórios em sincronia, deve dar uma olhada em rsync
.
Atenciosamente
for i in $(ls -1 directory1); do if (test -f directory2/$i) then echo $i; fi; done
Se você quiser fazer isso em todos os subdiretórios, uma boa maneira de fazer isso é:
diff --brief -r dir1/ dir2/
Eu prefiro usar o brief, mas você pode deixar isso de lado se quiser.
Isso funciona ..
ls -a1 /dir1 | sort > /tmp/1
ls -a1 /dir2 | sort > /tmp/2
diff /tmp/1 /tmp/2
não testado:
find /dir/A -printf "%P" | while read f; do
if [ ! -e "/dir/B/$f" ]; then
echo $f
fi
done
Dennis Williamson tinha uma boa resposta , mas eu precisava fazer isso de forma recursiva. 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 isto:
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.