Unzip or Unrar Many Files at Once in Linux Dosar Unzip sau Unrar Multe puţin o dată în Linux
If you've got a directory with dozens of zipped or rar'd files, you can run a single command to unzip them all in one step, thanks to the power of the bash shell. Dacă v-aţi luat un director cu zeci de fişiere arhivate sau rar'd, puteţi rula o comandă unică pentru a dezarhiva-le pe toate într-un singur pas, datorită puterii de shell bash.
For this task, we'll use bash's for loop command structure. Replace <var> with a variable name, and <list> with either a command that outputs a list or an explicit list. Pentru această sarcină, vom utiliza bash pentru structura de bucla de comandă. Înlocuiţi <var> cu un nume de variabilă, şi <list> fie cu o comandă care iesiri o listă sau o listă explicită.
for <var> in <list> pentru <var> în <list>
do face
command $<var>; comanda $ <var>;
done făcut
You can run it on a single line with this syntax instead: Puteţi rula pe o singură linie, cu această sintaxă în schimb:
for <var> in <list>;do command $<var>;done pentru <var> în <list>; a face comanda $ <var>; făcut
So if you want to unrar a list of files, you could use this command. Deci, dacă doriţi să unrar o listă de fişiere, puteţi utiliza această comandă. You don't necessarily need the quotes, but it helps when the filenames have spaces or something like that in them. Nu aveţi nevoie neapărat citate, dar ajută în cazul în care nume de fişiere trebuie să conţină spaţii sau ceva de genul că în ele.
for f in *.rar;do unrar e “$f”;done pentru f în *. rar; nu e unrar "$ f"; Done
If you wanted to use 7zip to extract a list of files: Dacă aţi vrut să folosească 7zip pentru a extrage o listă de fişiere:
for f in *.001;do 7z e “$f”;done pentru f în *. 001; a face 7z e "$ f"; Done
Or if you wanted to unzip a list of files: Sau, dacă ai vrut să unzip o listă de fişiere:
for f in *.zip;do unzip “$f”;done pentru f în *. ZIP; do unzip "$ f"; Done
You could even chain commands together if you wanted to. Ai putea chiar lanţul de comenzi împreună, dacă vrem să. For instance, if all your zip files contained .txt files and you wanted to unzip them and then move the unzipped files to another directory: De exemplu, în cazul în care toate zip dvs. fişierele conţinute. Txt şi ai vrut să dezarhivaţi-le şi apoi mutaţi fişierele dezarhivat la un alt director:
for f in *.zip;do unzip “$f”;done; for f in *.txt;do mv “$f” /myfolder/;done pentru f în *. ZIP; do unzip "$ f"; terminat; pentru f în *. txt; do mv "$ f" / myfolder /; făcut
The bash shell is just so incredibly powerful… this doesn't even tap the power, but it should give you a good idea of what is possible. Shell bash este doar atât de incredibil de puternic ... acest lucru nu de la robinet, chiar de putere, dar acesta ar trebui să vă oferi o idee bună a ceea ce este posibil.

Daily Email Updates Daily Actualizări de email
You can get our how-to articles in your inbox each day for free. Aveţi posibilitatea să obţineţi modul nostru de-a articole în Inbox în fiecare zi pentru drum liber. Just enter your name and email below: Doar introduceţi numele dvs. şi e-mail de mai jos:



Actually, I'm pretty sure with both these commands you can just do this: De fapt, eu sunt destul de sigur cu ambele aceste comenzi puteţi face tocmai acest lucru:
unzip *.zip unzip *. zip
unzip *.rar unzip *. rar
Seems a bit more straightforward. Pare un pic mai simplu.
That may work sometimes, but didn't work for me. Acest lucru poate uneori, dar nu au de lucru pentru mine. (just tried it again to make sure) (tocmai a incercat-o din nou pentru a vă asigura)
The article is mostly illustrating how to use the for / do in bash =) Articol este cea mai mare parte care ilustrează modul de utilizare pentru / de făcut în bash =)
How would I go about 'rarring' Cum as putea sa merg despre "rarring '
or zipping a bunch of folders? sau zipping o grămadă de dosare?
Is there a decompressor that extracts almost all file types, if so which? Există un decompresor care extrage aproape toate tipurile de fişiere, în cazul în care acest lucru?
find -name *.zip -exec unzip {} \; găsi-name *. zip-unzip exec () \;
Try unzip \*.zip – It works in RED HAT flavours, I have not tried it on any other linux. Încercaţi unzip \ *. zip - Acesta funcţionează în RED HAT arome, nu am încercat-o pe orice alt linux.
Why didn'ti find this 3 days ago? De ce didn'ti găsi acest 3 zile în urmă? The only matter is that the files aren't extracted in subdirectories. Problema este că numai fişierele nu sunt extrase în subdirectoare. I made a similar script myself. Am făcut un script similar mine însumi. Take a look: Aruncati o privire: http://ubuntu.alperortac.de/20.....ubfolders/ http://ubuntu.alperortac.de/20.....ubfolders/
Maybe Alp wants something like this: Poate Alp vrea ceva de genul:
for f in *.zip;do unzip “$f” -d “$f.inflated”;done pentru f în *. ZIP; do unzip "$ f"-d "$ f.inflated"; Done
It works on my Debian. It works pe Debian meu.
PS: I've not seen Alp link cause it seems broken. PS: Eu nu am vazut Alp cauza link-ul se pare rupt.
Sorry for the broken link, and thanks for pointing that out. Ne pare rău pentru link-ul spart, şi mulţumiri pentru indică faptul că afară. It's fixed now. It's fix acum.
Very useful tutorial! Tutorial Foarte util! Thanks! Mulţumesc!
I modified mine a bit to account for archives which ask for confirmation. Am modificare a mea un pic a ţine cont de arhive care cere confirmarea. If you 'man unzip' you'll find a -o switch which: “-o overwrite files WITHOUT prompting” Daca tu unzip "om", veţi găsi un switch-o care: "-o suprascrie fişierele fără a întreba",
So my .sh script amounted to: Deci, script-ul meu. Sh-au ridicat la:
for f in *.zip; pentru f în *. ZIP;
do unzip -o -d “$f”; do unzip-o-d "$ f";
done făcut
Hope this helps someone! Hope this ajutor pe cineva! Regards, Cu respect,
Ax3 Ax3
Looks like my previous code post didn't go thru completely. Se pare ca postul meu de cod anterior nu au trecut prin complet. I meant on the second line of code: M-am referit la a doua linie de cod:
do unzip -o -d foldername/ “$f”; do unzip-o-d numefolder / "$ f";
Ax3 Ax3
I know this page is old, but I just found it when looking for a good unrar script, so thought I would post my final solution. Ştiu că această pagină este vechi, dar tocmai am gasit-o atunci când caută un script de unrar bun, aşa că am crezut că ar posta mea soluţie finală. The situation: you're in a directory with a bunch of folders, each one containing a compressed file. Situaţia: sunteţi într-un director cu un buchet de dosare, fiecare dintre care conţine un fişier comprimat. I used to use this script, which found and extracted all the *.rar files: Am folosit pentru a utiliza acest script, care a găsit şi extras toate fişierele *. rar:
find -type f -name '*.rar' -exec unrar x {} \; găsi-type f-name '*. rar "unrar exec x () \;
But then i noticed some of my compressed files were distributed over many 'part' files, and occasionally, all of these would be *.rar files, and so this script would try to do the whole decompression for part file, which was annoying, time consuming and more importantly not the elegant solution! Dar apoi am observat că unele dintre fisierele mele comprimat au fost distribuite peste o parte de multe "" fişiere, şi, ocazional, toate acestea ar fi fişierele *. rar, şi aşa mai departe acest script va încerca să facă decompresie pentru întregul dosar parte, care a fost enervant, consumatoare de timp şi, mai important, nu soluţie elegantă! So after a bit of reading, I came up with this: Deci, după un pic de citit, am venit cu aceasta:
for directory in `ls -d */`; do pentru directorul în `ls-d * /"; do
rarFile=`ls $directory | grep -i .rar –max-count 1`; rarFile = `ls Listă $ | grep-i. RAR-max-count 1`;
unrar e $directory$rarFile; unrar e $ $ directorul rarFile;
done făcut
This iterates through each directory at the current level, and for each one finds just the first *.rar file, and extracts it to the current directory. Acest lucru iterates prin fiecare directorul de la nivelul actual, iar pentru fiecare o găseşte doar primul fişier *. rar, şi extractele-l la directorul curent.
thx a lot!!! thx foarte mult!