find -exec `basename {}` - hogy lehet ilyesmit csinálni?

Nagyon egyszerű dolgot akarok csinálni, bizonyára az orrom előtt van a megoldás, csak mégsem veszem észre.

Szóval segítség!

Van egy könyvtár, amin végig kellene tekerni, és a benne levő fájlokat megetetni egy programmal, és megmondani neki, hogy az outputot milyen fájlnéven várja.

Ez korábban így ment:

for i in /var/lib/amavis/JunkList/cur/*; do
program $i /var/lib/amavis/Junk/old/`basename $i`
done

Ezzel az volt csupán a gond, hogy ha üres az adott könyvtár, akkor a $i az ugye /var/lib/amavis/JunkList/cur/* és a program meg nem kezeli ezt le.

Jó, gondoltam akkor legegyszerűbb lesz find-dal

Valahogy így képzeltem:

find /var/lib/amavis/JunkList/cur -type f -exec program {} /var/lib/amavis/Junk/old/`basename {}` \;

Igen, csak mint kiderült, itt a basename nem csinált semmit, szóval az eredmény egy /var/lib/amavis/Junk/old//var/lib/amavis... stb path lett.

OK, akkor ez:

find /var/lib/amavis/JunkList/cur -type f -execdir echo /var/lib/amavis/Junk/old/{} \;

Ez ezt mondja:
.//var/lib/amavis/Junk/old/egy

find /var/lib/amavis/JunkList/cur -type f -execdir echo /var/lib/amavis/Junk/old/ {} \;
/var/lib/amavis/Junk/old/ ./egy

Eh...

szóval mit kellene ahhoz tennem, hogy a -exec után a {}-ből csak a fájlnév maradjon?

Bizonyára meg lehet oldani, csak nem látom, hogyan. És igen, lehet hogy egyszerűbb lett volna find helyett a for ciklus előtt megnézni, van-e fájl a könyvtárban, de most már a find viselkedése érdekel.

G

Hozzászólások

A programon belul hivd meg a basename-t.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Így a `basename {}` vegrehajtodik mielőtt a find elindulna, ezért nem jó.
Akkor már inkább valahogy így:

find /var/lib/amavis/JunkList/cur -type f -exec sh -c "program {} /var/lib/amavis/Junk/old/\$(basename {})" \;

for i in $(ls -1 /var/lib/amavis/JunkList/cur/); do
és ha üres a könyvtár akkor se lesz gond