/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Mystik med mv
Fra : Henrik Christian Gro~


Dato : 21-11-01 14:53


Hvis jeg har en fil der hedder "fil med mellemrum" kan jeg flytte den
hvis jeg bare husker at sætte gåseøjne om filnavnet, men det virker
tilsyneladende ikke når jeg bruger find til at generere filnavnene.

Se blot følgende (echo er for at undgå at zsh overskriver uddata):
serena% find . -name fil\* -printf "\"%p\" "; echo
"./fil med mellemrum"
serena% mv `find . -name fil\* -printf "\"%p\" "` /tmp
mv: "./fil: No such file or directory
mv: med: No such file or directory
mv: mellemrum": No such file or directory
serena% mv "./fil med mellemrum" /tmp
serena%

Gør jeg noget galt, og er der nogen der har et forslag til hvordan jeg
kan gøre?
Jeg ved godt `find ... -exec ...` er en mulighed, men jeg ville gerne
have noget der var hurtigere.

..Henrik

--
"Unix, Perl og Ole har man for at slippe for at gøre
arbejdet selv."

 
 
Peter Makholm (21-11-2001)
Kommentar
Fra : Peter Makholm


Dato : 21-11-01 15:05

Henrik Christian Grove <grove@sslug.dk> writes:

> Hvis jeg har en fil der hedder "fil med mellemrum" kan jeg flytte den
> hvis jeg bare husker at sætte gåseøjne om filnavnet, men det virker
> tilsyneladende ikke når jeg bruger find til at generere filnavnene.

Hvis du bruger gnu-tools kan du lave lade find producerer
0-terminerede strenge og lade xargs bruge disse. Mon ikke foelgende
virker:

$ tmp_mv() { mv "$@" /tmp }
$ find . -name fil\* -print0 | xargs -0 -s ??? tmp_mv

Du skal lige erstatte ??? med et passende stort tal.

--
Når folk spørger mig, om jeg er nørd, bliver jeg altid ilde til mode
og svarer lidt undskyldende: "Nej, jeg bruger RedHat".
-- Allan Olesen på dk.edb.system.unix

Kim Petersen (22-11-2001)
Kommentar
Fra : Kim Petersen


Dato : 22-11-01 15:04

Peter Makholm <peter@makholm.net> writes:

> Henrik Christian Grove <grove@sslug.dk> writes:
>
> > Hvis jeg har en fil der hedder "fil med mellemrum" kan jeg flytte den
> > hvis jeg bare husker at sætte gåseøjne om filnavnet, men det virker
> > tilsyneladende ikke når jeg bruger find til at generere filnavnene.
>
> Hvis du bruger gnu-tools kan du lave lade find producerer
> 0-terminerede strenge og lade xargs bruge disse. Mon ikke foelgende
> virker:
>
> $ tmp_mv() { mv "$@" /tmp }
> $ find . -name fil\* -print0 | xargs -0 -s ??? tmp_mv

Hmm - hvorfor ikke bare blive i find - og dermed aldrig komme over
parameter grænsen (selvom den er _stor_):

find . -name fil\* -exec mv "\{\}" /tmp \;

eller mere generelt:

flyt_lignende() {
find . -name $1 -exec mv "\{\}" $2 \;
}

--
Mvh. Kim Petersen /| Tlf: +4575831551 |\ Jomfru Ingefreds Vej 18
Software Engineer / | Fax: (none atm.) | \ 7100 Vejle
LSS / | Email: kim@vindinggaard.dk | \ DK - Danmark

Thorbjoern Ravn Ande~ (23-11-2001)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 23-11-01 12:08

Kim Petersen <kim@vindinggaard.dk> writes:

> Hmm - hvorfor ikke bare blive i find - og dermed aldrig komme over
> parameter grænsen (selvom den er _stor_):

Det afhaenger af hvor dyrt det er at fyre nye processer af.

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk

Peter Makholm (22-11-2001)
Kommentar
Fra : Peter Makholm


Dato : 22-11-01 15:10

Kim Petersen <kim@vindinggaard.dk> writes:

> Hmm - hvorfor ikke bare blive i find - og dermed aldrig komme over
> parameter grænsen (selvom den er _stor_):

Det stod i opgavebeskrivelsen.

--
Når folk spørger mig, om jeg er nørd, bliver jeg altid ilde til mode
og svarer lidt undskyldende: "Nej, jeg bruger RedHat".
-- Allan Olesen på dk.edb.system.unix

Kim Petersen (22-11-2001)
Kommentar
Fra : Kim Petersen


Dato : 22-11-01 15:33

Peter Makholm <peter@makholm.net> writes:

> Kim Petersen <kim@vindinggaard.dk> writes:
>
> > Hmm - hvorfor ikke bare blive i find - og dermed aldrig komme over
> > parameter grænsen (selvom den er _stor_):
>
> Det stod i opgavebeskrivelsen.

Ja, det gjorde der - hmm - jeg skal lære at læse

--
Mvh. Kim Petersen /| Tlf: +4575831551 |\ Jomfru Ingefreds Vej 18
Software Engineer / | Fax: (none atm.) | \ 7100 Vejle
LSS / | Email: kim@vindinggaard.dk | \ DK - Danmark

Henrik Christian Gro~ (23-11-2001)
Kommentar
Fra : Henrik Christian Gro~


Dato : 23-11-01 13:06

Peter Makholm <peter@makholm.net> writes:

> Hvis du bruger gnu-tools kan du lave lade find producerer
> 0-terminerede strenge og lade xargs bruge disse. Mon ikke foelgende
> virker:

Jeg havde overvejet nulterminerede strenge før jeg gav mig til at finde
ud af hvordan jeg fik find til at sætte gåseøjne omkring filnavne (det
var dog en hurtig søgning i SSLUG's e-post-arkiv, for at finde noget jeg
vidste jeg selv havde skrevet). Jeg var bare ikke i humør til
shell-scripting, og det kunne jeg se blev nødvendigt fordi xargs kun kan
sætte ind sidst på linien.

..Henrik

--
Når man kører Linux er dette også en mulighed:
Modeline "912x684" 64.00 912 966 1104 1232 684 699 706 734

Peter Makholm (23-11-2001)
Kommentar
Fra : Peter Makholm


Dato : 23-11-01 13:37

Henrik Christian Grove <grove@sslug.dk> writes:

> vidste jeg selv havde skrevet). Jeg var bare ikke i humør til
> shell-scripting, og det kunne jeg se blev nødvendigt fordi xargs kun kan
> sætte ind sidst på linien.

Det ser ud til at print0-trikket også virker på FreeBSD. Hvad
GNU-xargs kan som FreeBSD-xargs ikke ser ud til at kunne er at sætte
ind midt i linjen:

$ find . -print0 | xargs mv -0i mv "{}" /tmp

Det virker bare desvære kun med et argument ad gangen, så der er igen
problemet med at starte mange processer op.

--
Når folk spørger mig, om jeg er nørd, bliver jeg altid ilde til mode
og svarer lidt undskyldende: "Nej, jeg bruger RedHat".
-- Allan Olesen på dk.edb.system.unix

Kent Friis (23-11-2001)
Kommentar
Fra : Kent Friis


Dato : 23-11-01 18:18

Den Fri, 23 Nov 2001 13:37:21 +0100 skrev Peter Makholm:
>Henrik Christian Grove <grove@sslug.dk> writes:
>
>> vidste jeg selv havde skrevet). Jeg var bare ikke i humør til
>> shell-scripting, og det kunne jeg se blev nødvendigt fordi xargs kun kan
>> sætte ind sidst på linien.
>
>Det ser ud til at print0-trikket også virker på FreeBSD. Hvad
>GNU-xargs kan som FreeBSD-xargs ikke ser ud til at kunne er at sætte
>ind midt i linjen:
>
>$ find . -print0 | xargs mv -0i mv "{}" /tmp
>
>Det virker bare desvære kun med et argument ad gangen, så der er igen
>problemet med at starte mange processer op.

Prøv om ikke du kan ændre default antal argumenter på xargs (her er
det "xargs -n 10" der skal bruges).

Mvh
Kent
--
Det skete i de dage i november engang
at de første kataloger satte hyggen igang

Peter Makholm (11-12-2001)
Kommentar
Fra : Peter Makholm


Dato : 11-12-01 11:35

Peter Makholm <peter@makholm.net> writes:

> Hvis du bruger gnu-tools kan du lave lade find producerer

Jeg nærlæste lige manualsiden til GNU mv og kom til at tænke på denne
tråd.

> $ tmp_mv() { mv "$@" /tmp }
> $ find . -name fil\* -print0 | xargs -0 -s ??? tmp_mv

En pænere løsning, hvis man er ligeglad med standarder og bruger
GNU-værktøjer:

$ find . -name fil\* -print0 | xargs -0 mv --target-directory=/tmp

--
Når folk spørger mig, om jeg er nørd, bliver jeg altid ilde til mode
og svarer lidt undskyldende: "Nej, jeg bruger RedHat".
-- Allan Olesen på dk.edb.system.unix

Kim Petersen (22-11-2001)
Kommentar
Fra : Kim Petersen


Dato : 22-11-01 15:40

Henrik Christian Grove <grove@sslug.dk> writes:

> Hvis jeg har en fil der hedder "fil med mellemrum" kan jeg flytte den
> hvis jeg bare husker at sætte gåseøjne om filnavnet, men det virker
> tilsyneladende ikke når jeg bruger find til at generere filnavnene.
>
> Se blot følgende (echo er for at undgå at zsh overskriver uddata):
> serena% find . -name fil\* -printf "\"%p\" "; echo
> "./fil med mellemrum"
> serena% mv `find . -name fil\* -printf "\"%p\" "` /tmp
> mv: "./fil: No such file or directory
> mv: med: No such file or directory
> mv: mellemrum": No such file or directory
> serena% mv "./fil med mellemrum" /tmp
> serena%
>
> Gør jeg noget galt, og er der nogen der har et forslag til hvordan jeg
> kan gøre?
> Jeg ved godt `find ... -exec ...` er en mulighed, men jeg ville gerne
> have noget der var hurtigere.

Hvis de er i samme directory - dvs. du ikke nødvendigvis har brug for
find:

space_mv_tmp() {
mv "$@" /tmp
}

space_mv_tmp fil*

--
Mvh. Kim Petersen /| Tlf: +4575831551 |\ Jomfru Ingefreds Vej 18
Software Engineer / | Fax: (none atm.) | \ 7100 Vejle
LSS / | Email: kim@vindinggaard.dk | \ DK - Danmark

Michael Hjorth (23-11-2001)
Kommentar
Fra : Michael Hjorth


Dato : 23-11-01 00:28

Henrik Christian Grove wrote:
>
> Hvis jeg har en fil der hedder "fil med mellemrum" kan jeg flytte den
> hvis jeg bare husker at sætte gåseøjne om filnavnet, men det virker
> tilsyneladende ikke når jeg bruger find til at generere filnavnene.
>
> Se blot følgende (echo er for at undgå at zsh overskriver uddata):
> serena% find . -name fil\* -printf "\"%p\" "; echo
> "./fil med mellemrum"
> serena% mv `find . -name fil\* -printf "\"%p\" "` /tmp
> mv: "./fil: No such file or directory
> mv: med: No such file or directory
> mv: mellemrum": No such file or directory
> serena% mv "./fil med mellemrum" /tmp
> serena%
>
> Gør jeg noget galt, og er der nogen der har et forslag til hvordan jeg
> kan gøre?
> Jeg ved godt `find ... -exec ...` er en mulighed, men jeg ville gerne
> have noget der var hurtigere.
>
Shellen evaluerer kun en gang så de gåseøjne du sætter på med printf
bliver en del af strengen og IKKE evalueret. Løsningen er:

mv "`find . -name "fil*" -print`" /tmp

Michael.

Michael Hjorth (23-11-2001)
Kommentar
Fra : Michael Hjorth


Dato : 23-11-01 00:52

Michael Hjorth wrote:

> Shellen evaluerer kun en gang så de gåseøjne du sætter på med printf
> bliver en del af strengen og IKKE evalueret. Løsningen er:
>
> mv "`find . -name "fil*" -print`" /tmp
>
Dette virker selvfølgelig kun hvis der kun er een fil.
Hvis der er flere må du gøre sådan her i stedet:

find . -name "fil*" -print | while read a
do
mv "$a" /tmp
done

Michael.

Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408885
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste