සියලුම ගොනු ඩිරෙක්ටරියේ සිප් කරන්න?


526

දී ඇති නාමාවලියක ඇති සියලුම ලිපිගොනු zipවිධානය සමඟ zip කිරීමට ක්‍රමයක් තිබේද? භාවිතා කිරීම ගැන මා අසා ඇත *.*, නමුත් දිගුව රහිත ලිපිගොනු සඳහාද එය ක්‍රියා කිරීමට මට අවශ්‍යය.


2
ඔබ අපේක්ෂිත නාමාවලියෙන් එක් මට්ටමකට ඉහළින් සැරිසැරීමට උත්සාහ කර තිබේද zip myarch.zip mydir/*?
ජෝශප් ආර්.

14
හෝ වඩා හොඳzip -r myarch.zip mydir/*
ඇඩම්

27
හෝ වඩා හොඳzip -r myarch.zip mydir
ctrl-alt-delor

*.*තිතක් ඇති ඕනෑම ගොනුවක් අදහස් වේ. Cp / m සහ dos හි සියලුම ලිපිගොනු වල තිතක් ඇති අතර එය ඔබට එය ටයිප් කිරීමට (කළ නොහැකි විය *). එබැවින් මිනිසුන් *.*සියලු ලිපිගොනු ලෙස බැලීමට පැමිණියේය . අවසානයේදී මයික්‍රොසොෆ්ට් විසින් ශුන්‍ය හෝ වැඩි තිත් තිබිය හැකි දිගු ගොනු නාම එකතු කරන ලදි. කවුළුවල තිතක් ඇති ගොනුවක් සොයා ගැනීමට ඔබ ටයිප් කළ *.*.*යුතුය.
ctrl-alt-delor

Answers:


757

ඔබට භාවිතා කළ හැකිය *; අවශ්‍යතාවයක් නැත *.*. යුනික්ස් හි ගොනු දිගු විශේෂ නොවේ. *තිතක් ඇතුළුව අක්ෂර ශුන්‍ය හෝ වැඩි ගණනක් ගැලපේ. එබැවින් එය ගැලපේ foo.png, මන්ද එය අක්ෂර ශුන්‍ය හෝ වැඩි ගණනක් (හතක්, හරියටම කිව යුතුය).

*පෙරනිමියෙන් තිතකින් ආරම්භ වන ලිපිගොනු සමඟ නොගැලපෙන බව සලකන්න (එසේ නොවේ *.*). මෙය බොහෝ විට ඔබට අවශ්‍ය දෙයයි. එසේ නොවේ නම්, bash දී, ඔබ නම් shopt -s dotglobඑය (නමුත් තවමත් ඉවත් කරනු ඇත .හා ..). වෙනත් ෂෙල් වෙඩි වලට ඩොට්ෆයිල් ඇතුළු විවිධ ක්‍රම තිබේ (හෝ කිසිවක් නැත).

විකල්පයක් ලෙස, zipද ඇත -rඑකවර සමස්ත බහලුම ගස් කරන්න (සහ dotfile ප්රශ්නය ගැන කරදර වෙන්න ඕනේ නැහැ) (ආවර්තනික) විකල්පය:

zip -r myfiles.zip mydir

mydirඔබේ ලිපිගොනු අඩංගු නාමාවලිය කොහිද ? නිෂ්පාදිත සිප් එකෙහි නාමාවලි ව්‍යුහය මෙන්ම ලිපිගොනු ද අඩංගු වන බව සලකන්න. පීටර්ෆ් සිය අදහස් දැක්වීමේදී පෙන්වා දෙන පරිදි මෙය සාමාන්‍යයෙන් හොඳ දෙයක් ලෙස පෙනේ: සිප් එක නිස්සාරණය කිරීමෙන් උපුටා ගත් සියලුම ගොනු එක් උප බහලුමක පිළිවෙලට ගබඩා වේ.

-j/ --junk-pathsවිකල්පය සමඟ මාර්ග ගබඩා නොකරන ලෙස ඔබට zip ට පැවසිය හැකිය.

මෙම zipවිධානය ප්රලේඛනය එහි (බොහෝ) විකල්ප හැම දෙනා ගැන ම ඔබ කියන්නේ සමඟ එන එක, man zipඑම ලේඛනය බැලීමට ටයිප් කරන්න. මෙය සිප් කිරීමට අද්විතීය නොවේ; බොහෝ විධාන සඳහා ඔබට මේ ආකාරයෙන් ලියකියවිලි ලබා ගත හැකිය.


11
ඔබට එකතු කිරීමට අවශ්‍ය විය හැකිය, ලේඛනාගාරයේ ඇති සියල්ල ඉහළ මට්ටමේ නාමාවලියක අඩංගු කිරීම හොඳ පුරුද්දක් ලෙස සලකනු ලැබේ - එවිට යමෙකු ඔහුගේ / ඇයගේ වර්තමාන නාමාවලිය නිස්සාරණය කිරීම දූෂණය නොකරයි.
පීටර්ෆ්

පීටර්ෆ් කළා. මෙය ටිෆයිල් වලට වඩා සිප් ලිපිගොනු වල සම්මුතියක් අඩු වුවද, මම බිය වෙමි.
ඩෙරොබට්

අවාසනාවට ඔව්. ප්‍රභව කේත සමඟ වැඩ කිරීමේ ඩෙස්ක්ටොප් එකට ලිනක්ස් උරුමය සහ ලිනක්ස් උරුමය නිසා විය හැකිය.
පීටර්ෆ්

2
*ෂෙල්-ග්ලෝබින්ට ඩොට්ෆයිල් ඇතුළත් නොවන බව මතක තබා ගන්න (එනම් ගොනු නාම වලින් ආරම්භ වේ .). මුළු නාමාවලියම නමින් සිප් කිරීම සඳහා මෙය තවත් වාසියකි.
mrb

1
නමුත් -r භාවිතා කිරීම නාමාවලියම ඇතුළත් වන අතර එය මා කරන දේ බිඳ දමයි. * ඇතුළත් නොවේ ...?
tkbx

15

මගේ නඩුවේදී මට අවශ්‍ය වූයේ සෑම ගොනුවක්ම එහි ලේඛනාගාරයට සිප් කිරීමටය, එබැවින් මම පහත සඳහන් දෑ (තුළ zsh) කළෙමි :

$ for file in *; do zip ${file%.*}.zip $file; done

1
මෙහි කිසිවක් නැත mkv? මෙහි කිසිවක් විශේෂයෙන්ම zsh-specific. ගොනු නාමයක් අඩංගු ඕනෑම විචල්‍යයක් නිසියාකාරව උපුටා දැක්වීමට ඔබට අවශ්‍ය වනු ඇත, එබැවින් zip "${file%.*}.zip" "$file"විචල්යයන් දෙකම වටා ද්විත්ව උපුටා දැක්වීම් සමඟ.
ත්‍රිත්ව

1
ripripleee පළමුව, මගේ වැරදි සඳහනක් පෙන්වා දීම ගැන ස්තූතියි mkv. දෙවනුව, තර්ක උපුටා දක්වමින් අනවශ්ය වේ zsh, මෙන් නොව තුළ bash. ඒ නිසා තමයි මම මේ සඳහා විධානයක් නියම කළේ zsh.
රේඩන් රොස්බරෝ

අන්තිම අර්ධ මහා බඩවැල ඇම්පියර්සෑන්ඩ් සමඟ ප්‍රතිස්ථාපනය කිරීමෙන් එය සැලකිය යුතු ලෙස වේගවත් කළ හැකිය (නාමාවලියෙහි ඇති ගොනු ගණන සාධාරණ නම් ...). එසේ නොමැතිනම් find . -type f -maxdepth 1 -print0|xargs -r0 -n1 -P64 -I{} bash -c 'f="{}"; zip "${f%.*}.zip" "$f"'( -Pඔබගේ CPU නූල් මත පදනම්ව සකස් කර ඇත ...) (බොහෝ GNU පරායත්තතා ...)
ගර්ට් වැන් ඩෙන් බර්ග්

8

තවත් ක්‍රමයක් වනුයේ සොයා ගැනීම සහ xargs භාවිතා කිරීමයි: (මෙයට සිප් එකේ "." නාමාවලියක් ඇතුළත් විය හැකි නමුත් එය තවමත් නිවැරදිව උකහා ගත යුතුය. මගේ පරීක්ෂණය සමඟ සිප් සම්පීඩනයට පෙර තිත ඉවත් කළේය) find . -type f -exec zip zipfile.zip {} +

( ඔබේ අනුවාදය ක්‍රියාත්මක කිරීම සඳහා අවසානයට සහය නොදක්වන්නේ නම් +එය ප්‍රතිස්ථාපනය කළ හැකිය . එය මන්දගාමී වුවද ...)\;find+

මෙය පෙරනිමියෙන් සියලුම උප නාමාවලි ඇතුළත් වේ. GNU සොයාගැනීමෙන් -maxdepthඑය වළක්වා ගත හැකිය.


(භාවිතා කරමින් විසඳුම් මෙන් නොව *, මෙම dotfiles ඇතුලත් වනු ඇත හා බහලුම තුල බොහෝ ගොනු තිබේ නම්, වැටෙන නොවේ)
, ආකල්ප, වෑන් ගුහාවේ Berg

2

මෙය කිරීමට තවත් (මන්දගාමී) ක්‍රමයක් (වරකට එක් ගොනුවක් සිප් එකට එකතු කරයි):

for f in * .[^.]*; do
    [ -r "$f" ] || continue # Skip directories or non-existant files (Probably ".[^.]*" if directory has no dotfiles). Using -e will allow directories to be used as well
    zip zipfile.zip "$f" # If directories are included, you probably want to add -r
done

මෙහි *( වැඩකරන එකතු කරන ලද) තිත් ගොනු ගැටළු ඇති අතර එය එක් එක් ගොනුව සඳහා එක් වරක් zip ආරම්භ කර සංරක්ෂිතයට එක් කරයි. තුළ bash, එය ගොනු විශාල ප්‍රමාණයක් සමඟ ගනුදෙනු කරනු ඇත.

එය අනෙක් බොහෝ ක්‍රමවලට වඩා මන්දගාමී වනු ඇත, නමුත් සාපේක්ෂව සරල ය.


1
මෙය පිළිගත් පිළිතුරට වඩා අඩු සරල යැයි මම කියමි, මන්දගාමී වන අතර එමඟින් "කිසිවෙකු මෙය කරන්නේ ඇයි?" ඔබට එම ප්‍රශ්නයට පිළිතුරු දිය හැකි නම්, එම සන්දර්භය ඔබේ පිළිතුරට ඇතුළත් කිරීමට මම නිර්දේශ කරමි, එසේ නොමැති නම් එය දැනටමත් හොඳ පිළිතුරක් ඇති පැරණි ප්‍රශ්නයකට නරක පිළිතුරක් යැයි මම සිතමි.
සෙන්ටිමේන්

Ent සෙන්ටිමේන්: සීමාවන් මම සටහන් කරමි. මට අධ්‍යාපනික වටිනාකමක් ඇති බව මට හැඟේ. (නාමාවලි මඟ හැරෙන්නේ නැත්නම්, එය තරමක් සරල ය). ඒ වෙනුවට (සම්මත) බාහිර මෙවලමක් භාවිතා කර ඔබට වඩා වේගවත් පිළිතුරක් අවශ්‍ය නම්, මගේ අනෙක් පිළිතුර එය ආවරණය කරයි. (තිත් ලිපිගොනු හැසිරවීම ඉවත් කිරීමත් සමඟ (එය ප්‍රශ්නයේ සඳහන් නොවී නිවැරදි භාවයට බලපායි), එය තරමක් අලංකාර යැයි මට හැඟේ):for f in *; do zip zip.zip "$f"; done
ගර්ට් වැන් ඩෙන් බර්ග්

1
පිළිගත් පිළිතුර බාහිර විධානයක් භාවිතා නොකරන අතර එය වේගවත් වනු ඇති බව සලකන්න. මෙම පිළිතුර ප්‍රයෝජනවත් වන්නේ කුමන අවස්ථාවෙහිදීද?
සෙන්ටිමේන්

1
Enti සෙන්ටිමේන් පරාමිතීන් ලෙස යැවිය හැකි ප්‍රමාණයට වඩා ලිපිගොනු ඇති විට තාර සමඟ. (+ xargs වඩා හොඳ බව සොයා ගන්න, මන්ද ලූප පහසුය ...). එය ප්‍රශ්නයට (අද්විතීය) පිළිතුරකි. එය නිසැකවම ප්රශස්ත පිළිතුර නොවේ. (යමෙකුට තරමක් වෙනස් තත්වයක් තිබේ නම්, ප්‍රශස්ත නොවන පිළිතුරු තවමත් සමාන ගැටළු සඳහා ප්‍රයෝජනවත් වේ - උදා: තාර එහි ඕනෑම නාමාවලියක් ගොනු කිරීමට අවශ්‍ය නම්)
ගර්ට් වැන් ඩෙන් බර්ග්
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.