මට gzip භාවිතා කර සම්පූර්ණ ෆෝල්ඩරයක්ම zip කළ හැකිද?


436

මම යුනික්ස් හි ෆෝල්ඩරයක් zip කිරීමට උත්සාහ කරමි. Gzip විධානය භාවිතා කර එය කළ හැකිද?


7
ඔබට gzip -r myfolderනැවත නැවත ගොනු gzip කරන භාවිතා කළ හැකිය . gunzip -r myfolder නැවත නැවත ගොනු මුදාහරින ගොනු භාවිතා කර ඔබට එය ඉවත් කළ හැකිය . වැඩි විස්තර සඳහා, man gzip
වැලන්ටින් බජ්රාමි

13
භාවිතා කරන්න tar; එය සම්පීඩනය සඳහා විකල්ප සඳහා සහය දක්වයි. gzipනිර්මාණය කර tarඇත්තේ ආදේශකයක් ලෙස නොව අනුපූරකයක් වශයෙනි.
devnull

13
0 val0x00ff ගේ යෝජනාව නිසැකවම ඔබට ඉටු කර ගැනීමට අවශ්‍ය දේ නොවන බව සලකන්න.
ෂදූර්

4
@ ෂදූර් ඒ නිසා මම එය පළ කළේ commentඔහුගේ ප්‍රශ්නයට පිළිතුර නොවන නිසාය.
වැලන්ටින් බජ්රාමි

3
ෂදූර් යන්නෙන් අදහස් කරන්නේ කුමක්ද යන්න අවතක්සේරු කිරීම. ලිපිගොනු 1සහ 2ෆෝල්ඩරය යටතේ ලබා දී playgroundඇත. gzip -r ./playgroundඔබට දෙන 1.gzසහ 2.gz(හා තවත් 1හා 2ෆෝල්ඩරය යටතේ ගොනු) playgroundඑහි ඇති සියල්ල නැති නිසා මෙය සිප් ගොනුව,.
ෂියාඕ

Answers:


701

නොමැත.

මෙන් නොව zip, gzipසම්පීඩන ඇල්ගොරිතමයක් ලෙස පමණක් ක්‍රියා කරයි.

නිසා ටේප් ධාවකයන් යුගයට කර ඇති අතර සමහර සවන් නැවත විවිධ හේතු, Unix නම් වැඩසටහන භාවිතා tarපසුව වැනි සම්පීඩන වැඩසටහන සමග සම්පීඩිත කළ හැකි සංරක්ෂිත දත්ත, gzip, bzip2, 7zipආදිය,

නාමාවලියක් "zip" කිරීම සඳහා, නිවැරදි විධානය වනු ඇත

tar -zcvf archive.tar.gz directory/ 

මෙය කියනු tarඇත

  • z (gzip) ඇල්ගොරිතම භාවිතයෙන් එය සම්පීඩනය කරන්න

  • c (සාදන්න) හි ඇති ගොනු වලින් සංරක්ෂිතයක් directory( tarපෙරනිමියෙන් පුනරාවර්තනය වේ)

  • v (වාචිකව) ලැයිස්තුව (/ dev / stderr මත ඇති බැවින් එය නල විධාන වලට බල නොපායි) එය සංරක්ෂිතයට එකතු කරන සියලුම ගොනු.

  • ප්‍රතිදානය f (ගොනුවක්) ලෙස ගබඩා කරන්නarchive.tar.gz

මෙම tarවිධානය මඟින් gzip(මේ හරහා සහාය -zඔබගේ පහසුව සඳහා ධජය) තනිකරම. මෙම gzipවිධානය / lib සම්පූර්ණයෙන්ම වෙනම වේ. ඉහත විධානය effectively ලදායී ලෙස සමාන වේ

tar -cv directory | gzip > archive.tar.gz

ඔබ භාවිතා කරන වත්මන් නාමාවලියට සංරක්ෂිතය විසන්ධි කිරීමට සහ ඉවත් කිරීමට

tar -zxvf archive.tar.gz

එම විධානය effectively ලදායී ලෙස සමාන වේ

gunzip < archive.tar.gz | tar -xv

tarවෙනත් බොහෝ විකල්ප සහ භාවිතයන් ඇත; කවදා හෝ එහි මෑන්පේජ් හරහා කියවීමට මම හදවතින්ම නිර්දේශ කරමි.


53
දේවල් වඩාත් පැහැදිලිව ප්‍රකාශ කිරීම සඳහා මෙය හරියටම සමාන වේ tar -cv directory | gzip > archive.tar.gz. එහි ප්‍රති ing ලයක් ලෙස සංරක්ෂිතය උපුටා ගැනීම tar -zxvfහෝ සමඟ පවා ලබා ගත හැකිය zcat file.tar.gz | tar -xv. තාර යනු gzip වෙතින් සම්පූර්ණයෙන්ම ස්වාධීන වන බැවින්, tarවිධානයට පහසුව සඳහා gzip සහාය ඇතුළත් වේ.
පැට්‍රික්

මම tar cvzfසෑහෙන කාලයක් තිස්සේ පාවිච්චි කරනවා . සැලකිල්ලට ගත යුතු එක් දෙයක්: ගොනුවක් 7-zipමුදා හැරීමට ඔබ වින්ඩෝස් ( නියම කිරීමට) භාවිතා කරන්නේ නම් *.tar.gz, එය වට දෙකක් ගතවේ. එකක් *.tar.gzගොනුව ගොනුවකට මුදා හැරීම *.tar, ඊළඟට එම තාර ගොනුව මුල් අන්තර්ගතයට මුදා හැරීම. එය විශාල ගොනු සඳහා (උදා: ල logs ු-සටහන්) මුළු මුදා හැරීමේ කාලය වැඩි කරයි
ෂියාඕ

1
ලේඛනාගාරය නම් කිරීම යන්ත්‍රමය වශයෙන් ඕනෑම දෙයකට බලපාන්නේද? ඇල්ගොරිතම මුලින් සිප් කිරීමට භාවිතා කළ බව මිනිසුන්ට දැනගැනීමට ලැබීම සතුටක් බව මම දනිමි (එනිසා .gz), නමුත් ඒ හැරෙන්නට ඔබ ලේඛනාගාරය නම් කරන්නේ කෙසේද යන්න වැදගත්ද?
hello_there_andy

3
@hello_there_andy එය බොහෝ යුනික්ස් වලට කිසිදු වෙනසක් නොකරයි, නමුත් කවුළු (සහ ලිනක්ස් වලින් ස්මාර්ට් ටැබ් සම්පූර්ණ කිරීම) ගොනු නාම දිගුව මත පදනම්ව උපකල්පන සිදු කරයි.
ෂදූර්

1
advadimkotov ඔබ සොයන දේ මෙය විය හැකිය: superuser.com/questions/168749/…
ෂදූර්

49

මෙම gzipවිධානය ඇත්තෙන් වෙනසට භාජනය වන භාවිත කරන විට, තනි zip ගොනුව බවට බහලුම සංකෝචනය නැහැ -rස්විචය. ඒ වෙනුවට එය එම නාමාවලි ව්‍යුහය හරහා ගමන් කරන අතර එය සොයා ගන්නා සෑම ගොනුවක්ම වෙනම ගොනුවකට සිප් කරයි.

උදාහරණයක්

පෙර

$ tree dir1/
dir1/
|-- dir11
|   |-- file11
|   |-- file12
|   `-- file13
|-- file1
|-- file2
`-- file3

දැන් gzipවිධානය ක්‍රියාත්මක කරන්න

$ gzip -r dir1

පසුව

$ tree dir1/
dir1/
|-- dir11
|   |-- file11.gz
|   |-- file12.gz
|   `-- file13.gz
|-- file1.gz
|-- file2.gz
`-- file3.gz

ඔබ ඩිරෙක්ටරි ව්‍යුහය සිප් කිරීමට කැමති නම් ඔබට tarවිධානය භාවිතා කිරීමට අවශ්‍ය වනු ඇත , ඉන්පසු ලැබෙන .tarගොනුව සම්පීඩනය කරන්න.

$ tar zcvf dir1.tar.gz dir1/

උදාහරණයක්

$ tar zcvf dir1.tar.gz dir1/
dir1/
dir1/file1
dir1/file2
dir1/dir11/
dir1/dir11/file11.gz
dir1/dir11/file12.gz
dir1/dir11/file13.gz
dir1/file3

පහත දැක්වෙන තනි ගොනුවේ ප්‍රති results ල:

$ ls -l | grep tar
-rw-rw-r-- 1 saml saml  271 Oct  1 08:07 dir1.tar.gz

ඔබට එහි අන්තර්ගතය තහවුරු කළ හැකිය:

$ tar ztvf dir1.tar.gz 
drwxrwxr-x saml/saml         0 2013-10-01 08:05 dir1/
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file1
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file2
drwxrwxr-x saml/saml         0 2013-10-01 08:04 dir1/dir11/
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file11.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file12.gz
-rw-rw-r-- saml/saml        27 2013-10-01 07:45 dir1/dir11/file13.gz
-rw-rw-r-- saml/saml         0 2013-10-01 07:45 dir1/file3

5

මම මෙම විධාන 2 තිර රචනය කළෙමි:

gzipdir:

#!/bin/bash
if [[ -d $1 ]]; then
    cd "$1"
    cd ..
    base=$(basename "$1")
    tar -zcvf "$base.tgz" "$base"
    if [[ $? == 0 && -f "$base.tgz" ]]; then
        rm -rf "$base"
    fi
else
    echo "Usage: $0 DIRECTORY";
fi

ungzipdir:

#!/bin/bash
if [[ -f $1 ]]; then
    base=${1%%.*}
    file=$(basename "$1");
    dir=$(basename "$base");
    if [[ ! -d $base ]]; then
        mkdir "$base"
        cd "$base"
        cd ..
        tar -xvf "$file"
        if [[ $? == 0 && -d "$dir" ]]; then
            rm -f "$file"
        fi
    else
        echo "Directory $base already exists. Nothing done."
    fi
else
    echo "Usage: $0 file.tgz";
fi

(!!!) කරුණාකර භාවිතයට පෙර පරීක්ෂා කරන්න (අසාමාන්‍ය ආකාරයකින් භාවිතා කරන්නේ නම් වැදගත් දත්ත ඉවත් කළ හැකි 'rm -f' ඇති බැවින්).

භාවිතා කරන්නේ කෙසේද:

cd /home/; gzipdir MyDirectory හෝ gzipdir /home/MyDirectory

/Home/MyDirectory.tgz නිර්මාණය කර සාර්ථකත්වය මත MyDirectory ඉවත් කරනු ඇත (!!!).

ungzipdir /home/MyDirectory.tgz

/ Home / MyDirectory නිර්මාණය කර සාර්ථකත්වය මත /home/MyDirectory.tgz ඉවත් කරයි.


ඩිරෙක්ටරියක් තුළ ඇති සියලුම ලිපිගොනු සිප් කිරීම සඳහා: find ./* -maxdepth 0 -type d -exec gzipdir {} \; (සොයා ගැනීමේ විධානය සමඟ ප්‍රවේශම් වන්න, -exec echo {}පළමුව එය පරීක්ෂා කර බලා ඔබ './' ග්‍රහණය කර නොගන්නා බවට වග බලා ගන්න, එමඟින් PARENT නාමාවලිය සිප් වනු ඇත, සමහර විට ඔබේ මුළු නිවසම බිඳ දැමිය හැක)
andrew lorien

2

ඔබේ ලිනක්ස් තාර -zවිකල්පයට සහය නොදක්වන්නේ නම් ඔබට පහත සඳහන් දෑ භාවිතා කළ හැකිය:

tar -cvf - dir | gzip > dir.tar.gz

2

භාවිතා කිරීමට මම නිර්දේශ කරමි pigz( GZip සමාන්තරව ක්‍රියාත්මක කිරීම )

tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz


මම එය බොහෝ දේ භාවිතා කරමි (සහ පික්ස්), නමුත් පයිප්ප සහ ප්‍රතිදාන යළි හරවා යැවීම ක්‍රියාත්මක වන විට එය ක්‍රියාත්මක වේද?
මයිකල් වුල්ෆ්

2

“මට ලිනක්ස් මත zip භාවිතා කර සම්පූර්ණ ෆෝල්ඩරයක්ම zip කළ හැකිද?” යන ප්‍රශ්නයට පිළිතුර. වාක්‍ය ඛණ්ඩය භාවිතා කිරීම:

zip -r <zip file name> <folder to zip>

ඔබට නව ප්‍රශ්නයක් ඇත්නම්, කරුණාකර ප්‍රශ්න අසන්න බොත්තම ක්ලික් කිරීමෙන් එය අසන්න . සන්දර්භය සැපයීමට එය උදව් කරන්නේ නම් මෙම ප්‍රශ්නයට සබැඳියක් ඇතුළත් කරන්න. - සමාලෝචනයෙන්
ජෙෆ් ෂලර්

2
E ජෙෆ්ෂලර්: මෙය පිළිතුරකි. එය බරපතල වැරැද්දකි (මම විශ්වාස කරමි), නමුත් එය පැහැදිලිවම පිළිතුරකි.
ස්කොට්

1
@ize: මට විශ්වාසයි ඔබ පළ කළ විධානය ඇත්ත වශයෙන්ම gzip භාවිතා නොකරන බව.
dhag

1
අසන ලද ප්‍රශ්නය වැනි සිප් භාවිතා කිරීම සඳහා කරුණු, බොහෝ විට කතුවරයා කවුළුවල කළ ආකාරයටම එකම දේ කළ හැකි බව දැන ගැනීමට කැමති වනු ඇත. බොහෝ මිනිසුන් දුර බැහැර සිතීමට අකමැති වීම කනගාටුවට කරුණකි.
ෆ්ලෝරියන් හේගල්

2
ප්‍රශ්නය නියම කරන විට එය ව්‍යාකූලයි ... “gzip භාවිතා කිරීම”.
ජෙෆ් ෂලර්

2

සම්පූර්ණත්වය සඳහා, ඔබට පසුබිමෙහි ගොනුව තාර කිරීමට අවශ්‍ය නම්, @ ෂදූර්ගේ පිළිතුර භාවිතා &කර අවසානයේ එකතු කරන්න :

tar -zcvf archive.tar.gz directory/ &
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.