دستور split
* اگر کاربر بخواهد یک فایل 10 گیگابایتی را توسط یک فلش مموری 2 گیگابایتی، به دستگاه دیگری منتقل نماید، راه حل چیست؟
* چنانچه در بستر شبکه، بر روی اندازه فایلها محدودیت حجم 500 مگابایت قرار داده باشند، برای انتقال یک فایل 5 گیگابایتی چه باید کرد؟
* برای انتقال یک فایل 8 گیگابایتی با استفاده از رسانه انتقالی که فایل سیستم آن FAT32 باشد، از چه روشی میتوان بهره برد؟ (حداکثر حجم فایل در سیستم فایل FAT32 برابر با 4 گیگابایت می باشد)
* گاهی حجم فایلهای آرشیو (Log File) بسیار زیاد میشود، به اندازه ایی که حتی باز کردن این فایل ها در یک ویرایشگر، می تواند به حافظه دستگاه آسیب رسانده و آن را کند نماید. معمولا کاربر فقط یک قسمت از فایل را برای پردازش یا تجزیه و تحلیل در یک زمان نیاز دارد. در این حالت از چه روشی میتوان استفاده نمود؟
& راه حل ساده برای موارد بالا و سایر موضوعات مشابه، استفاده از ابزار split می باشد. با استفاده از این ابزار میتوان یک فایل بزرگ را به چند قسمت کوچک تقسیم کرد. سپس فایلهای کوچک را به سیستم مقصد منتقل نمود و در نهایت با تجمیع فایلهای کوچک، فایل بزرگ را به حالت اصلی خود برگرداند.
با بیان چند مثال به بررسی این دستور می پردازیم.
مثال ۱ :
استفاده از دستور split ، در حالت پیشفرض : (فایل learnlinux.txt یک فایل متنی با 5364 خط می باشد)
split learnlinux.txt
در حالت پیشفرض دستور split فایل اصلی را به فایلهای 1000 خطی تقسیم می نماید. و همچنین نام فایلهای خروجی با پیشوند x شروع و در ادامه با کاراکترهای aa که بسمت zz پیش میروند، تکمیل می شود. مکان قرار گیری فایلهای خروجی، دایرکتوری فعلی کاربر می باشد.
خروجی دستور بالا بصورت زیر می باشد. (دستور wc با سوییچ l تعداد خطوط یک فایل را نشان می دهد.)
wc -l x*
1000 xaa
1000 xab
1000 xac
1000 xad
1000 xae
364 xaf
5364 total
در این مثال فایل learnlinux.txt به 6 فایل کوچکتر تبدیل می شود.
مثال 2 :
نمایش جزییات در اجرای دستور split با استفاده از سوییچ verbose :
split learnlinux.txt --verbose
creating file 'xaa'
creating file 'xab'
creating file 'xac'
creating file 'xad'
creating file 'xae'
creating file 'xaf'
مثال 3 :
تعیین تعداد خطوط فایلهای خروجی دستور split :
split -l 1700 learnlinux.txt
wc -l x*
1700 xaa
1700 xab
1700 xac
264 xad
5364 total
با اجرای دستور بالا ، فایل learnlinux.txt به فایلهایی با تعداد خط 1700 ، تبدیل می شود.
مثال 4 :
تعیین اندازه فایلهای خروجی دستور split :
split -b 4M learnlinux.txt
du -sh *
12M learnlinux.txt
4.0M xaa
4.0M xab
4.0M xac
با استفاده از سوییچ b در دستور split می توان اندازه هر فایل خروجی را مشخص نمود. کاراکتر K بر حسب کیلوبایت، کاراکتر M بر حسب مگابایت و کاراکتر G بر حسب گیگابایت می باشد.
مثال 5 :
تعیین تعداد فایلهای خروجی دستور split :
split -n 3 learnlinux.txt
ls
learnlinux.txt xaa xab xac
در دستور بالا با استفاده از سوییچ n و عدد 3 ، فایل learnlinux.txt به 3 فایل تقسیم می گردد.
مثال 6 :
تغییر پیشوند نام فایل های خروجی دستور split :
split learnlinux.txt Split_File_
ls
learnlinux.txt Split_File_aa Split_File_ab Split_File_ac
با روش بالا، الگوی پیشوند نام فایلهای خروجی تغییر می یابد.
مثال 7 :
تغییر پسوند کاراکتری به عددی، در نام فایل های خروجی دستور split :
split -d learnlinux.txt
ls
learnlinux.txt x00 x01 x02 x03 x04 x05
همانطور که در خروجی مشخص میباشد، پسوند aa به 00 تغییر یافته است.
مثال 8 :
تغییر تعداد کاراکترهای پسوند، در نام فایل های خروجی دستور split :
split -n 4 learnlinux.txt -a 5
ls
learnlinux.txt xaaaaa xaaaab xaaaac xaaaad
در مثال بالا، استفاده از سوییچ a و عدد 5 سبب میشود که قسمت پسوند نام فایل از 5 کاراکتر تشکیل گردد.
مثال 9 :
ترکیب سوییچ های دستور split :
split -a 1 -n 4 -d learnlinux.txt Example_
ls
Example_0 Example_1 Example_2 Example_3 learnlinux.txt
در دستور بالا، سوییچ a و عدد ۱ تعداد کاراکتر های پسوند فایلهای خروجی را تعیین می کنند. سوییچ n و عدد 4 ، تعداد فایلهای خروجی را مشخص می نمایند. سوییچ d سبب تغییر پسوند به حالت عددی می شود. و در نهایت الگوی قرار داده شده در انتهای دستور، پیشوند نام فایلهای خروجی را تعیین می کند.
مثال 10 :
تبدیل فایلهای خروجی دستور split به یک فایل واحد :
بعد از اینکه توسط دستور split یک فایل به قطعات کوچکتر تبدیل گردید و فرایند مربوطه انجام پذیرفت، در نهایت برای تبدیل قطعات یک فایل به فایل واحد، از روش زیر استفاده می شود.
cat xa* >learnlinux_final.txt
نکته : برای اطمینان از درستی فرایند تقسیم یک فایل حجیم به فایلهای کوچکتر و در نهایت تبدیل فایلهای کوچکتر به یک فایل واحد بصورتی که محتوای فایل تغییر نکرده باشد، میتوان از دستور md5sum استفاده نمود.
دستور md5sum :
این دستور بر اساس محتوای هر فایل، یک کد 128 بیتی تولید می نماید. هرگز دو فایل متفاوت، کد یکسان ندارند.
برای صحت یکسان بودن محتوای یک فایل بعد از فرایند تقسیم و یکپارچگی، میتوان کدهای تولید شده را قبل و بعد از انتقال فایل مقایسه نمود.
مثال 11 :
بررسی صحت یکسان بودن محتوای یک فایل بعد از فرایند تقسیم و یکپارچگی :
در ابتدا با استفاده از دستور زیر، کد منحصر به محتوای فایل learnlinux.txt را می سازیم.
md5sum learnlinux.txt
605acd0f2b467dc7fec01906c663b532 learnlinux.txt
با دستور زیر فایل learnlinux.txt به 200 قسمت کوچکتر با پیشوند نام فایل file_ تبدیل می شود.
split -n 200 learnlinux.txt file_
ls
file_aa file_am file_ay file_bk file_bw file_ci file_cu file_dg file_ds file_ee file_eq file_fc file_fo file_ga file_gm file_gy file_hk ……..…
توسط دستور scp فایلهای تقسیم شده به سیستم مقصد کپی می شوند.
scp -P 2020 file_* 192.168.20.40:/home/masih
در سیستم مقصد فایلهای کوچک با دستور زیر به یک فایل واحد به نام learnlinux_new.txt تبدیل می شوند.
cat file_*>learnlinux_new.txt
با استفاده از دستور زیر، کد منحصر به محتوای فایل learnlinux_new.txt را می سازیم.
md5sum learnlinux_new.txt
605acd0f2b467dc7fec01906c663b532 learnlinux_new.txt
با مقایسه بین دو کد ایجاد شده میتوان یکسان بودن فایلهای مبدأ و مقصد را تعیین نمود.