Mam plik 100 GB i chcę podzielić na 100 plików 1 GB każdy (według podziału wiersza)
na przykład
split --bytes=1024M /path/to/input /path/to/output
Dla wygenerowanych 100 plików chcę zastosować gzip / zip do każdego z tych plików.
Czy można użyć jednego polecenia?
--line-bytes=1024M
.Odpowiedzi:
Użyj „--filter”:
split --bytes=1024M --filter='gzip > $FILE.gz' /path/to/input /path/to/output
źródło
One-liner korzystający z warunkowej jest tak blisko, jak to tylko możliwe.
gzip
będzie działał tylko wtedy, gdysplit
zakończy się powodzeniem z powodu warunku,&&
który jest również międzycd
isplit
upewniając się, że równieżcd
się powiódł. Zwróć uwagę na tosplit
igzip
wyślij go do bieżącego katalogu zamiast możliwości określenia katalogu wyjściowego. W razie potrzeby możesz utworzyć katalog:Aby złożyć wszystko z powrotem w całość:
źródło
Użycie tego polecenia z
-d
opcją pozwala wygenerować sufiksy numeryczne.Wygenerowane pliki:
źródło
Funkcja bash do kompresji w locie za pomocą pigz
źródło