Chcę utworzyć plik tar, w którym wszystkie katalogi i pliki są przetwarzane w kolejności alfabetycznej. Dotyczy to całej hierarchii katalogów, która jest tarowana, więc zacznie się od przetworzenia pierwszego katalogu alfabetycznie, a następnie podkatalogów alfabetycznie itp. Przejrzałem stronę man i nie mogę znaleźć przełącznika.
Przyznaję, to jest w połowie nowość, w połowie lekka optymalizacja. Po prostu nie mogę uwierzyć, że nie ma łatwego sposobu na zrobienie tego. Coś mi brakuje.
Odpowiedzi:
Slartibartfast jest na dobrej drodze, ale domyślnym zachowaniem tar jest zejście do katalogów, więc możesz uzyskać więcej niż jedną kopię tego samego pliku zawartą w wygenerowanym pliku tar. Możesz to sprawdzić wykonując
tar tf file.tar | sort
Obejście polega na włączeniu opcji --no-recursion do tar. Ponadto powinieneś być w stanie wysyłać dziwne nazwy plików, używając-print0
opcji znajdowania, a następnie--null
opcji tarowania. Wynik końcowy wygląda następująco:find paths -print0 | sort -z | tar cf tarfile.tar --no-recursion --null -T -
Możesz sprawdzić kolejność w pliku tar, używając
tar tsf tarfile.tar
. Chociaż prawdopodobnie nigdy nie będziesz potrzebować opcji -print0, -z i --null, chyba że wiesz, że napotkasz nazwę pliku z osadzonym znakiem nowej linii, nigdy tego nie próbowałem.źródło
Kolejność plików w pliku tar tak naprawdę nie ma znaczenia, ponieważ po rozpakowaniu plików system plików i tak nie zachowa kolejności.
Nie ma na to przełącznika, ale jeśli naprawdę tego chciałeś, możesz dostarczyć tarowi listę nazw plików w posortowanej kolejności, i utworzy on plik tar w kolejności, w jakiej go nadasz.
źródło
tar tf tarfile | sort
Zakładając, że nie masz żadnych plików z nowymi liniami w nazwach:
Jeśli to nie zadziała (nigdy tego nie próbowałem, więc nie wiem - oznacza stdin dla argumentu -T):
Następnie pojawia się pytanie, dlaczego. Ale czasem łatwiej nie pytać.
źródło
Pax jest swego rodzaju następcą POSIXa dla cpio i tar i łączy w sobie najlepsze aspekty obu. Domyślnie zapisuje archiwa tar (ustar). Wykonuje także automatyczne łączenie i monitowanie o nośniki, a po zakończeniu drukuje podsumowanie.
źródło
Alternatywnie do odpowiedzi @ CharlieHerron, jeśli interesuje Cię tylko zachowanie zawartości (plików, dowiązania symbolicznego) i metadanych folderów (np. Pozwolenie na folder, mtime itp.), Możesz odfiltrować foldery z danych
find
wyjściowych.źródło