Używam rsnapshot do tworzenia kopii zapasowych, które generują serię folderów zawierających pliki o tej samej nazwie. Niektóre pliki są na stałe połączone, a inne są osobne. Na przykład, hourly.1/file1
i hourly.2/file1
mogą być twardo połączone z tym samym plikiem, podczas gdy hourly.1/file2
i hourly.2/file2
są całkowicie oddzielnymi plikami.
Chcę znaleźć ilość miejsca zajmowanego przez folder, hourly.2
ignorując wszystkie pliki, które są twardymi linkami do plików hourly.1
. Tak więc w powyższym przykładzie chciałbym uzyskać rozmiar file2, ale zignoruj file1.
Używam bash na Linuksie i chcę to zrobić z wiersza poleceń tak prosto, jak to możliwe, więc nie proszę o żadne duże rozwiązania graficzne lub inne tylko dla systemu operacyjnego.
źródło
hourly2
, polecenie wykona niewłaściwą odpowiedź.hourly.2
. Jeśli zostaną tam skopiowane, nie będą miały dodatkowych linków, a moje polecenie będzie działać. Jeśli są one mocno powiązane, to oczywiście się nie powiedzie. Zakładam, że nowe pliki kopii zapasowych są kopiowane.Jeśli chcesz, aby rozmiar plików znajdujących się poniżej,
hourly.2
ale nie poniżejhourly.1
, możesz uzyskać go nieco pośredniodu
. Jeślidu
przetwarza ten sam plik więcej niż jeden raz (nawet pod różnymi nazwami, tj. Twardymi linkami), zlicza ten plik tylko za pierwszym razem. Więc to, czego dotyczydu hourly.1 hourly.2
raport,hourly.2
to rozmiar, którego szukasz. A zatem:(Działa na każdym systemie POSIX i większości innych wariantów Uniksa. Zakłada, że nazwa katalogu
hourly.1
nie zawiera żadnego nowego wiersza).źródło
Jak mówi @Gilles, ponieważ
du
liczy tylko pierwsze hardlinks wskazujące na ten sam i-węzeł, który napotyka, możesz nadać mu katalogi z rzędu:Oznacza to, że dowolny plik w „hourly.2” odwołujący się do i-węzła (inaczej „prawdziwy” plik) już wymieniony w „hourly.1”, nie będzie liczony.
źródło
$ du -hcs dirA dirB
Prościej
Przykład
źródło
Niesamowicie kompilacje BusyBox
find
pochodzą bez-printf
wsparcia. Oto modyfikacja odpowiedzi @ grebneke :źródło