Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

טיפים - לפצל ולאחד קבצים עם split ו cat

Bash_Tips - 09/07/2020 - 13:17
נושא ההודעה: לפצל ולאחד קבצים עם split ו cat
מכירים את זה שקבלתם לידכם התקן USB כדי להעביר אליו איזשהו קובץ גדול?
ואז בדיוק ברגע השיא כשפעולת העתקה כמעט מסתיימת אתם מגלים שמערכת הקבצים של הכונן היא FAT, ולכן העתקה נכשלת כי לא ניתן להעתיק קבצים מעל 4GB. לא כיף

פקודת split מאפשרת לפצל קבצים לאיזה גודל שתרצו, בעיקרון היא עובדת נפלא על קבצי טקסט, אבל היות והיא לא משנה את תוכן הקובץ היא עדין נהדרת כדי לפתור בעיות גם בסוגי קבצים אחרים.

קוד:
$ split -b 2G my_file.mp4 my_file_part-


מה בעצם יש לנו כאן?
דגל b- מאפשר לפצל לפי גודל (K/M/G), שם הקובץ עליו אני רוצה לפעול, ומהו השם התחלתי של הקבצים שיפוצלו.
זה נראה כך.

קוד:
$ ls 
my_file.mp4 
my_file_part-aa
my_file_part-ab

הפקודה ממספרת חלקים לפי אותיות, ברירת מחדל היא שני אותיות, דבר זה נתון לשינוי על ידי שימוש בדגל a- ומספר שמייצג כמה אותיות יתווספו.
קוד:

$ split -b 2G my_file.mp4 my_file_part -a 1
$ ls
my_file.mp4 
my_file_part-a 
my_file_part-b

אפשרויות נוספות הן
חלוקה לפי מספר החלקים ולא לפי גודל הקובץ בעזרת דגל n-.
שימוש במספרים במקום באותיות בעזרת הדגל --numeric-suffixes.
פיצול קבצי טקסט לפי מספר השורות לקובץ (l-).


אוקי צלחנו את החלק של פיצול הקבצים אבל איך מאחדים אותם חזרה?

כפי שראינו בפוסטים הקודמים פקודת cat יודעת לאחד קבצים על ידי שירשור, אפשרי להשתמש ב wildcard כדי לאסוף את כל הקבצים הרלוונטים ולאחד את כולם.

קוד:
$ cat my_file_part-* > my_new_file.mp4
$ ls
my_file.mp4 
my_file_part-a 
my_file_part-b 
my_new_file.mp4

לא מאמינים שזה אותו הקובץ בדיוק בלי שום שינויים?
נוכל לאמת את זה עם גיבוב של md5 לשני הקבצים
קוד:

$ md5sum my_file.mp4
f86e0306d4c2a4fd3f18edd1a199a840  my_file.mp4

$ md5sum my_new_file.mp4
f86e0306d4c2a4fd3f18edd1a199a840  my_new_file.mp4


כמה הערות בקשר לפקודת split
הפקודה לא מעבדת את הפלט ולכן קבצים המכילים בכותרות הקובץ מידע על סוג הקובץ וערכים נוספים, מידע זה לא יועתק לקבצי הפיצול.

מהסיבה הזאת פיצול של קבצי מוסיקה ווידאו לא יעבדו פרט לחלק הראשון שמכיל את המידע הדרוש לפיענוח, וגם אותו חלק יציג את האורך המלא של הקובץ כמו המקור אבל יעבוד תכלס רק עד החלק שפיצלנו.


לטיפים נוספים מוזמנים לערוץ הטלגרם
https://t.me/bash_tips
כל הזמנים הם GMT + 2 שעות