Jak różnicować nazwy plików w dwóch katalogach (bez zapisu do plików pośrednich)?


31

Staram się zrobić coś w stylu:

diff `ls -1a ./dir1` `ls -1a ./dir2`

Ale to nie działa z oczywistych powodów. Czy istnieje lepszy sposób na osiągnięcie tego (w 1 linii) niż ten?

ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2

Dzięki

Odpowiedzi:



10
diff -rq dir1 dir2

korzystając z opcji -r, chodź po całych drzewach katalogów, rekurencyjnie sprawdzając różnice między podkatalogami i plikami, które występują w porównywalnych punktach w każdym drzewie. Sztuką jest użycie opcji -q, aby ukryć porównania linia po linii


3
@festo: Nie chcesz poitacji tego pytania, tak naprawdę nie chcę różnicować zawartości plików, chcę różnicować dane wyjściowe lspoleceń
bguiz

+1, Właściwie to otrzymałem to samo wyjście z jednym zastrzeżeniem, diff -rq zgłosiło połączony plik jako „Brak takiego pliku lub katalogu”. Plus jeden za prawidłowe i szczerze prostsze użytkowanie. (nawet jeśli odpowiedź IVA jest lepszą „szansą na naukę” do zastąpienia procesu (> _ <)
xtian

1
Jest to znacznie wolniejsze niż różnicowanie nazw plików: należy odczytać i porównać całość każdego pliku.
Zaz

@Josh oczywiście, ponieważ robi rekurencyjnie ....
Braiam

1
@Braiam: Nawet jeśli rekurencyjnie różnicujesz nazwy plików (używając na przykład rsyncz tą --dry-runopcją), byłoby to znacznie szybsze niż diff -r.
Zaz
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.