find -exec

Van valakinek ötlete, hogy a find -exec kapcsolója után hogyan tudok a megtalált file könyvtárára hivatkozni?

Vmi ilyesmire gondolok:


find -type f -iname "*.txt" -exec echo `dirname \{\}` -> `basename \{\}` \;

Csak persze a backtick már jóelőre végrehajtódik...

Hozzászólások

find -type f -iname "*.txt" -exec echo `dirname \{\}` -> `basename \{\}` \;

Ezt kene valahogy megvedeni eloszor is.... pl.:
find -type f -iname "*.txt" -exec echo `dirname \{\}` '->' `basename \{\}` \;

persze ez az ellen nem ved :-)

viszont:
find -type f -iname "*.txt" -exec dirname {} \; -exec basename {} \;
mukodni latszik, azaz:
bla/bla
bla
bla/blu
ble

meg lehet igy is:

for f in `find -type f -iname "*.txt"`; do echo `dirname $f` -> `basename $f`; done

persze, ha van space a file-nevben, akkor ilyesmi:
IFS=$'\n' for f in `find -type f -iname "*.txt"`; do echo `dirname $f` -> `basename $f`; done
ha enter is van, akkor szivas :-)

de lehet meg igy is:
$ cat kiir.sh
#!/bin/bash
echo `dirname $1` -\> `basename $1`
$ find -type f -iname "*.txt" -exec kiir.sh {} \;

Zsiraf

p.s.: igy is lehet ugyeskedni:

find -type f -iname "*.txt" -exec sh -c 'f={}; echo `dirname $f` "->" `basename $f`' \;

p.s2.: Ja, a legegyszerubb persz az, hogy:

find -type f -iname "*.txt" -printf "%h -> %f\n"

;-) ;-)

Köszönöm, ezt kerestem.
Természetesen nem az echo parancsot akarom végrehajtatni, az csak példa volt. (Így maradhatott bent a -> is, effektive nem próbáltam ki a parancsot...)

Amire szükségem volt az a for ciklus, remekül megfelel az adott feladatra. Ha nem vagyok tiszta zombi az este, még akár eszembe is juthatott volna... Mindenesetre kösz mégegyszer.

Babszem.

find -type f -iname "*.txt" -printf "%h -> %f\n"

jo dolog a man ;-)
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Én csinálnék egy aliast/fv-t a shellben, vagy egy scriptecskét, és azt exec-elném meg -- randa, de fincsi :-))