Почетак › Форуми › Линукс › Програмирање › BASH: kako iskopirati fajlove u svim poddirektorijumima u jedan direktorijum?
- This topic has 20 одговора, 7 гласова, and was last updated 12 years, 9 months раније by
Marel.
-
АуторЧланци
-
1. маја 2008. у 4:19 pm #10045
foxbunny
УчесникRecimo, imam fajlove:
$PWD/zivotinje/maca
$PWD/zivotinje/kuca
$PWD/zivotinje/zirafa
$PWD/zivotinje/sibirski\ haski
$PWD/stvari/solja
$PWD/stvari/kasicaI sad, hocu sve te stvari da iskopiram u folder
/neki/tamo/folder
Ja probao ovo:
for i in $(find $PWD ! -type d -print | sed ‘s/ /\\ /g’)
do
cp $i /neki/tamo/folder
doneMedjutim, kad to uradim, onda mi „$PWD/zivotinje/sibirski\ haski“ tretira kao „$PWD/zivotinje/sibirski\“ i „haski“ i onda se buni kako ti falovi ne postoje.
Da li neko zna kako da resim ovaj problem?
1. маја 2008. у 4:32 pm #69579kmilos
УчесникHehe, ovo se zove zakucavanje ekserčića pneumatskim čekićem 😀
Probaj samo cp -R, ili još bolje -a
1. маја 2008. у 4:56 pm #69580Владимир
Учесник@milosk
Hmm, koliko ja vidim on hoće sve fajlove i samo fajlove, da kopira u isti direktorijum.1. маја 2008. у 5:08 pm #69581kmilos
Учесник@Владимир
U pravu si kad bolje pročitam, znači hoće da ih „sravni“.Možda treba $i zaviti u navodnike, mada uvek pomešam koje pa obično probam sve tri varijante: „…“, ‘…’, i obrnute `…`
1. маја 2008. у 5:25 pm #69582RiSK
УчесникMa ‘double quotes’ ili naski navodi se koriste za to. Treba da boravi „$i“
1. маја 2008. у 5:30 pm #69583foxbunny
УчесникObrnuti se nesto cudno ponasaju, i na prvi pogled ne mogu da skapiram sta se desava sa stringovima. Ovi jednostruki ne mogu posto ne podrzavaju interpolaciju, a ovi dupli ne postizu nista.
Ma, nesto se meni cini da vec kod
for i in $(…)
on razdvaja stringove po razmacima.
1. маја 2008. у 5:33 pm #69584foxbunny
УчесникBTW, kad smo vec kod shell programiranja, sta vi mislite o zsh shellu?
1. маја 2008. у 6:00 pm #69585RiSK
УчесникBack-quotes sluze za razvijanje stringa u komandu. Sve sto je izmedju dva back-quota (`) se tretira kao komanda, zatim se izlaz te komande stavlja na mesto gde je bio unos apostrofima i ponovo izvrsava kao komanda.
Evo primer da ti bude jasnije: Kada ukucas
[code]echo dmesg[/code]
Ispuisacese red u kome pise dmesg (da ne poverujes :))
Kada ukucas [code]`echo dmesg`[/code]
Desice se sledece: bash razvija komandu ovicenu znacima obrnutih navoda. Komanda izmedju dva znaka ` se izvrsava. Izlaz te komande se, zatim, pise na mesto same komande. Izlaz komande „echo dmesg“ je samo „dmesg“, tako da ce se pocetka komanda komanda razviti u komandu [code]dmesg[/code] i ova ce se izvrsiti tako da joj izlaz bude prikazan u terminalu.Valjda sam ti nesto objasnio 🙂
Strong-quotes (apostrof) i soft-quotes (navodnici) se razikuju po tome sto se ispod apostrofa ne razvija nista, dok se ispod navoda razvijaju promenljive. Npr. [code]echo ‘$HOME'[/code] stampa $HOME a [code]echo „$HOME“[/code] stampa tvoj home direktorijum.
Sto se tice skripte, da greska je u zaglavlju ciklusa. Tek sada sam pogledao sta ti ustvari radis.
Ovo sto hoces da uradis se radi malo elegantnije. Kmanda find ima svic -exec kojom se navedena komanda primenjuje na jedan od izlistanih fajlova. Slicnu stvar (neki kazu efikasnije) mozes izvesti kombinacijom find|xargs.
Komanda koja menja ciklus i find bi trebala da izgleda ovako:
[code]cd /sta/kopiras && find -exec cp {} /gde/kopiras/ ;[/code]
Pogledaj man strane za find i xargs za vise informacija. Imas dobro citanje i ovde http://www.bsd-srbija.org/dokumentacija/doku.php/koriscenje_find_komandeSto se tice zsh-a odlican je, ali pre svega za interaktivan rad. Ima gomilu completitiona, prepravki i dzidzamidza. Obozavbam ga sto se toga tice. Za skripte nema nikakvu prednost nad bash-om (za sve sto ima viska u odnosu na bash postoji zaobilaznica). Sa druge strane glomazniji je i sporije se izvrsava. Tako da skriptuj u bashu 😉
1. маја 2008. у 6:05 pm #69586foxbunny
УчесникOk, hvala. Nisam znao za te viticaste zagrade {} u -exec argumentu. Ali ono, glupo bi bilo da ih nema, kad bolje razmislim. Hvala, RiSK, pomogao si mi BASH dosta. 😀
1. маја 2008. у 6:20 pm #69587RiSK
УчесникMa nema na cemu. Tu smo da se pomazemo koliko mozemo.
Srecno bashanje 😉 -
АуторЧланци
Мораш бити пријављен да би поставио коментар у овој теми.