Početak›Forumi›Linuks›Programiranje›BASH: kako iskopirati fajlove u svim poddirektorijumima u jedan direktorijum?
- This topic has 20 odgovora, 7 glasova, and was last updated 15 years, 10 months ranije by Marel.
-
AutorČlanci
-
1. maj 2008. u 4:19 pm #10045foxbunnyUčesnik
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. maj 2008. u 4:32 pm #69579kmilosUčesnikHehe, ovo se zove zakucavanje ekserčića pneumatskim čekićem 😀
Probaj samo cp -R, ili još bolje -a
1. maj 2008. u 4:56 pm #69580ВладимирUčesnik@milosk
Hmm, koliko ja vidim on hoće sve fajlove i samo fajlove, da kopira u isti direktorijum.1. maj 2008. u 5:08 pm #69581kmilosUčesnik@Владимир
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. maj 2008. u 5:25 pm #69582RiSKUčesnikMa ‘double quotes’ ili naski navodi se koriste za to. Treba da boravi “$i”
1. maj 2008. u 5:30 pm #69583foxbunnyUčesnikObrnuti 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. maj 2008. u 5:33 pm #69584foxbunnyUčesnikBTW, kad smo vec kod shell programiranja, sta vi mislite o zsh shellu?
1. maj 2008. u 6:00 pm #69585RiSKUčesnikBack-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. maj 2008. u 6:05 pm #69586foxbunnyUčesnikOk, 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. maj 2008. u 6:20 pm #69587RiSKUčesnikMa nema na cemu. Tu smo da se pomazemo koliko mozemo.
Srecno bashanje 😉 -
AutorČlanci
Moraš biti prijavljen da bi postavio komentar u ovoj temi.