Dzielenie plików w Linux'ie
Czasem zdarza ze nasz plik jest za duży żeby go zapisać w całości na pojedynczy nośnik, lub przekracza limit nałożony przez serwer na którym chcemy go umieścić, jednym z rozwiązań w takiej sytuacji jest podzielenie pliku na części. Przedstawię w tym artykule kilka sposobów jak zrobić to w Linuksie.
1. Split
Program split jest częścią pakietu coreutils powinien więc znajdować się domyślnie w każdej dystrybucji. Załóżmy ze mamy plik pliczek.iso i ma on rozmiar 200MB,a chcemy go podzielić na części po 35MB, wydajemy więc polecenie:
split -b 35M -d pliczek.iso pliczek.iso.
Już tłumacze co robią poszczególne parametry.
- -b rozmiar każdej części w bajtach(gdzie litera po numerze oznacza odpowiednio: M - megabajty, K - kilobajty, a G - gigabajty)
- -d sprawia ze końcówka nazwy każdej części będzie numerem, a nie jak domyślnie litera(co jest moim zdaniem nieczytelne), ilość cyfr z ilu składa się numer określa parametr -a(domyślną wartością jest 2).
- pliczek.iso nazwa naszego pliku
- pliczek.iso. nazwa każdej części, w naszym przypadku nazwa pliku, kropkę na końcu dodałem ze względu estetycznego, dzięki temu dodany przez program numer każdej części nie będzie zlewał nam się z rozszerzeniem. Jeśli nie podamy tego parametru każdy plik będzie miał nazwę 'x' połączoną z numerkiem części, czyli na przykład: 'x05'.
Po wydaniu tego plecenia nasz katalog wygląda następująco:
[virhilo@hpek dzielenie]$ ls -lh
total 401M
-rw-r--r-- 1 virhilo virhilo 200M 2008-08-25 11:50 pliczek.iso
-rw-r--r-- 1 virhilo virhilo 35M 2008-08-25 12:04 pliczek.iso.00
-rw-r--r-- 1 virhilo virhilo 35M 2008-08-25 12:04 pliczek.iso.01
-rw-r--r-- 1 virhilo virhilo 35M 2008-08-25 12:04 pliczek.iso.02
-rw-r--r-- 1 virhilo virhilo 35M 2008-08-25 12:04 pliczek.iso.03
-rw-r--r-- 1 virhilo virhilo 35M 2008-08-25 12:04 pliczek.iso.04
-rw-r--r-- 1 virhilo virhilo 25M 2008-08-25 12:04 pliczek.iso.05
Jak widzimy plik został poprawnie podzielony:)
Łączenie pliku pociętego splitem
Ok. Mamy już nasz plik w częściach, jednak w tej formie jest on raczej mało użyteczny, połączmy go w całość(użyjemy do tego celu polecenia cat):
cat pliczek.iso.0* > polaczony.iso
Pierwszym parametrem są nazwy naszych części, w naszym przypadku powtarzająca się część nazwy zakończona gwiazdka, gdyż wypisywanie wszystkich części po kolei, szczególnie w przypadku większej ich ilości nie ma sensu.
Następnie występuje znak przekierowania standardowego wyjścia, gdyż to na nie cat domyślnie wyświetla zawartość połączonego pliku.
Ostatnim parametrem jest nazwa pliku wynikowego, w naszym przypadku polaczony.iso.
Gotowe:) mamy już połączony plik, dla pewności porównajmy sumy kontrolne:
[virhilo@hpek dzielenie]$ md5sum polaczony.iso pliczek.iso
b8b7bbc9c242f6e31977f6232629680e polaczony.iso
b8b7bbc9c242f6e31977f6232629680e pliczek.iso
jak widzimy są identyczne, więc wszystko przebiegło prawidłowo.
Co jednak zrobić gdy potrzebujemy połączyć podzielony plik pod systemem Windows, nie wiem jak wyglądało by tam łączenie tak podzielonego pliku, tak więc przedstawię alternatywne metody
2. 7-zip
7-zip jest otwartym programem kompresującym oferującym stopień kompresji wyższy o około 30-50% od archiwów zip, więcej informacji można znaleźć na stronie programu.
Zaczynamy od zainstalowania 7-zip'a, w przypadku Archlinux'a instalujemy pakiet p7zip wydając polecenie:
pacman -Sy p7zip
natomiast w przypadku Windowsa pobieramy odpowiedni plik instalacyjny ze strony programu. Dalej omawiał będę całą operacje tylko pod Linuksem, pod Windowsem mamy do dyspozycji tryb okienkowy, więc nie powinno być problemów.
Plik kompresujemy i dzielimy na części wydając polecenie:
7z -v 35m a pliczek.7z pliczek.iso
Parametry:
- -v oznacza rozmiar każdej części, litera na końcu oznacza jednostkę(odpowiednio b, k, m, g)
- a oznacza dodanie plików do archiwum, czyli w naszym przypadku utworzenie nowego archiwum
- pliczek.7z to nazwa archiwum
- pliczek.iso to nazwa naszego pliku
Możemy również dodać prametr: -mx=0, cyfra oznacza stopień kompresji, czyli w tym przypadku jej brak.
Po wydaniu tego polecenia mamy w naszym katalogu pliki:
[virhilo@hpek dzielenie]$ ls -lh
total 404M
-rw-r--r-- 1 virhilo virhilo 35M 2008-08-25 12:54 pliczek.7z.001
-rw-r--r-- 1 virhilo virhilo 35M 2008-08-25 12:51 pliczek.7z.002
-rw-r--r-- 1 virhilo virhilo 35M 2008-08-25 12:52 pliczek.7z.003
-rw-r--r-- 1 virhilo virhilo 35M 2008-08-25 12:52 pliczek.7z.004
-rw-r--r-- 1 virhilo virhilo 35M 2008-08-25 12:53 pliczek.7z.005
-rw-r--r-- 1 virhilo virhilo 28M 2008-08-25 12:54 pliczek.7z.006
Tak przygotowane archiwum dekompresujemy i łączymy poleceniem:
7z x pliczek.7z.001
Gdzie: x to polecenie rozpakowania archiwum, a pliczek.7z.001 to nazwa pierwszej części naszego archiwum. I gotowe;)
Więcej informacji:
- Forum 7-zip'a
- man 7z
25 sierpnia 2008 o 15:10:49
Prościej się nie da, dobry artykuł. :)
25 sierpnia 2008 o 15:30:36
> cat pliczek.iso.0* > polaczony.iso
Skąd to 0?
Przy 7-Zipie zaś wypadałoby dodać, jak pakować bez kompresji — niektórych formatów naprawdę nie warto kompresować.
25 sierpnia 2008 o 15:41:42
@Michał Górny
To zero to pozostałość po autodopelnianiu nazw(tab) w sumie z nim czy bez niego to żadna różnica-wszystkie częsci mają je w swojej nazwe.
Co do 7-zip'a masz racje-czasem niewarto kompresowac, zreszta na moim 200MB pliku trwalo to ladnych kilka minut a zysku nie bylo zadnego(moze dlatego ze plik pochodzi z /dev/urandom). Dopisalem juz jak wyłączyć kompresje.
25 sierpnia 2008 o 15:45:31
to 0 stąd ze pliki miały nazwy pliczek.iso.0x
można by samo pliczek.iso* ale jakby przypadkiem znalazl sie w katalogu jakiś pliczek.iso.hahaha-hack...:)
27 sierpnia 2008 o 15:42:02
Od jakiegoś czasu moim środowiskiem pracy jest też win* Vista,
dla tych, którzy lubią konsolę polecam cygwin'a - dzięki niemu można tak samo wygodnie skorzystać ze split'a i cat'a co pod unixami.
07 września 2008 o 21:12:36
A w jaki sposób pod linuksem połączyć plik podzielony rarem?
08 września 2008 o 11:32:10
@dawid
zainstalowac pakiet unrar, po czym wydajemy polecenie: unrar x pierwsza_czesc_archiwum.rar proste co;)
26 stycznia 2009 o 19:46:35
Dzieki za artykuł, przydal sie w 100%
pozdrawiam
03 marca 2009 o 10:33:01
Ciekawy post. Pozdrawiam
21 kwietnia 2009 o 00:13:12
Wielkie dzięki!!!