Czy istnieją narzędzia dla systemu Linux / Unix, w których wszystkie pliki w jednym katalogu nie występują w innym? Zasadniczo szukam diff, który działa na wyjściu ls.
Doceniane są także krótkie i słodkie skrypty.
Czy istnieją narzędzia dla systemu Linux / Unix, w których wszystkie pliki w jednym katalogu nie występują w innym? Zasadniczo szukam diff, który działa na wyjściu ls.
Doceniane są także krótkie i słodkie skrypty.
Odpowiedzi:
Grzmotnąć:
diff <(cd dir1; ls) <(cd dir2; ls)
Porównaj tylko nazwy plików - nie zawartość plików.
ls
, użyj find
zamiast tego!
Jak ludzie ci tutaj mówili, możesz używać DIFF w różnych wariantach użytkowania. Lub po prostu użyj dirdiff
zamiast tego, co jest przeznaczone do tego, czego próbujesz! :-)
Ale jeśli chcesz zachować synchronizację niektórych katalogów, naprawdę powinieneś się przyjrzeć rsync
.
pozdrowienia
Jeśli chcesz to zrobić również we wszystkich podkatalogach, dobrym sposobem na to jest:
diff --brief -r dir1/ dir2/
Wolę używać skrótu, ale możesz to pominąć, jeśli chcesz.
Dennis Williamson miał dobrą odpowiedź , ale musiałem to zrobić rekurencyjnie. GNU findutils 4.7.0 nie sortuje danych wyjściowych, więc oto, czego użyłem
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort)
Aby to zrobić tylko w jeden sposób i stworzyć listę plików, użyłem tego:
diff <(cd $dir1; find | sort) <(cd $dir2; find | sort) \
| grep '< ./' | sed "s,< ./,$dir1/,"
Aby to działało poprawnie, ani $ dir1, ani $ dir2 nie powinny zawierać ukośnika końcowego.
diff dir1 dir2 | grep "Only"