shellscript find?

Fórumok

shellscript find?

Hozzászólások

[quote:0604ddc7bd="wry"]
khiraly: nem értem miért túrod a netet, a fentebb javasolt findos printf-fel mi volt a gond?

Koszi a szkriptet, space nelkuli fajlokra tenyleg mukodik. Gondoltam hogy nem lesz tul sok space benne (kicsit talonba tettem ezt, es ma vettem ujra elo).

Szoval a space -re is ki kellene dolgozni ezt a szkriptet.
2 lehetoseget ajanlottal:
-exec: Ha execbol hivok meg egy shell szkriptet, hogy adom at a shell szkriptnek a megtalalt fajl nevet? (beleteszem mondjuk egy shell valtozoba? Es ezt finddel hogyan?)

For korbefogasa idezojellel:

Ezzel az a problema, hogy ettol a for megbolondul;-(
Pelda:
Eskuv\?.doc
Eskuv\?\ itt\ szunet.doc

Tehat van 2 fajlunk peldanak a konyvtarba egyikben van szokoz is (tobb helyen).

A te szkripted minden szokoznel lefutott, es a vegen ilyen eredmenyunk lett:
mv Eskuv\?.doc EskuvO.doc
mv Eskuv\? EskuvO
mv itt itt
mv szunet.doc szunet.doc

Ha idezojelek koze tettem:
[code:1:0604ddc7bd]
for ORIG in "`find /path/ -name 'Esk*.doc' -printf %p`"; do
UJ=`echo -n "$ORIG" | sed -e 's/\?/O/g'`
mv $ORIG $UJ
done
[/code:1:0604ddc7bd]

ERedmeny:
mv "./Esküv?.doc ./Esküv? itt szunet.doc " "./EsküvO.doc ./EsküvO itt szunet.doc "

Tehat a for nem tudja hol kene darabolni. Szoval ennyire jutottam.
Nagyon nem megy ez a shell szkripteles ...:-(

Udv,
Khiraly

[quote:4016c67abf="khiraly"]
-exec: Ha execbol hivok meg egy shell szkriptet, hogy adom at a shell szkriptnek a megtalalt fajl nevet? (beleteszem mondjuk egy shell valtozoba? Es ezt finddel hogyan?)

RTFM!

-exec command ;

Execute command; true if 0 status is returned. All following
arguments to find are taken to be arguments to the command until
an argument consisting of `;' is encountered. The string `{}'
is replaced by the current file name being processed everywhere
it occurs in the arguments to the command, not just in arguments
where it is alone, as in some versions of find. Both of these
constructions might need to be escaped (with a `\') or quoted to
protect them from expansion by the shell. The command is exe-
cuted in the starting directory.

[quote:b0d675b64c="khiraly"]For korbefogasa idezojellel:

Ezzel az a problema, hogy ettol a for megbolondul;-(

a for i in *txtnél a *txtt tilos idézőjelbe tenni, ha spacet is tartalmazhatnak a filenevek :wink:

Baratunk az IFS valtozo!

[code:1:e6ce2ecdc9]
OIFS="$IFS" ; IFS=$'\n' ; for i in $(find . -name "Esk*doc") ; do
...
...
done
IFS="$OIFS"
[/code:1:e6ce2ecdc9]

[quote:58c43a5293="asd"]Na akkor par tevhitet eloszlatok:
1) GIMP agyuval verebre kepforgatashoz.
2) imagemagick is jo, de sajnos kinyirja az EXIF tageket, valamint ront a kepminosegen (eloszor dekodolja a kepet, elforgatja pixelrol pixelre, majd ujra kodolja - az eredeti veszteseges kodolassal)
3) legtobb kepben van egy mezo ami a kep iranyat, allasat valtoztatja... ha AZT valtoztatod meg, nem kell a kep-biteken valtoztatnod. keresd meg az exiftran csomagot, illetve png-hez valami mast.

A kerdesre a valasz:
idezek egy scriptet, ezt hasznalom image galleryk letrehozasara. Benne van minden amit szeretnel, feel free to use it.

[code:1:58c43a5293]#!/bin/sh
mkdir -p thumbnails
ls -1 *.jpg *.JPG *.jpeg | while read NAME
do
BASENAME=`echo $NAME | sed -e 's,\.[a-z]*$,,i' -e 's, ,_,g'`
NEWNAME="thumbnails/${BASENAME}_small.png"
test -f $NEWNAME && continue
echo Converting $NAME...
convert -resize 160x100 -quality 9 "$NAME" "$NEWNAME"
echo "<a href=\"$NAME\"><img border=0 src=\"$NEWNAME\"></a>" >> index.tmpl
done[/code:1:58c43a5293]

Ha a hülyeség fájna....

Kedves barátom, mielőtt beleszólsz a levesbe, légyszi RTFM

1. A legtöbb képben NINCS egy mező ami a kép irányát mondja meg. Ki mondta neked, hogy a világon több exif-es jpeg van mint más formátum, ugyanis a legelterjettebb formátumok közül a jpeg+exif (ami zárójelben megjegyezve egy *^^ˇ#&#@#&@^ gány...) az egyetlen, ahol a kép eredeti állása rögzítve van.

2. a PNG-hez nincs valami más, mivel a PNG-ben nincs "képállás" "mező".. Szabadon idézek a PNG specifikációból.: PNG-ben négyszögletes képeket lehet tárolni, ahol az egymás utáni képpontok a kép bal felső sarkától indulva soronként balról jobbra következnek... Pont.

3. Miért lenne a GIMP ágyúval verébre a képforgatásra??? Mennyivel jobb a netpbm, ahol előbb egy nagy helyigényű pnm-mé kell alakítani a képet, majd ezt lehet rotálni?

4. A PNG-ben nincsenek "exif TAG-ek", mivel az exif a Jfif 1.00 előtti fileformátumának kiterjesztése (megerőszakolása a tiff TAG-rendszerével pfúj..., mikor mindenre lett volna lehetőség az eredeti Jfif szellemiségben is!!), tehát azt az IM nem tudja levágni..

5. A jpegben az a trükk a forgatásra, hogy a sorok és oszlopok felcserélgetésével a képet kitömörítés nélkül is meg lehet forgatni (ez olyan tulajdonságokból adódik, hogy 8x8-as blokkokra "vágja szét" tömörítéskor az eredeti képet, valamint ha nem jön ki 8 pontra az utolsó sor/oszlop akkor kiegészítí nullákkal, ...) de ilyen lehetőség a deflate-olt PNG stream-el nincs!! Ott bizony ki-be kell tömöríteni...

6. A PNG nem veszteséges kódolás. Pont.

Zsiráf

U.i.: boccs az erős hangnemér, de lóbáljon RTFM-et az, aki még egy specifikációt sem olvasott el a témában amiben "tévhiteket oszlat el", másrészt mivel van egy digitális fényképezőgépe, azt hiszi, hogy exif-ből áll a világ...

[quote:a7d61a0b73="khiraly"]Sziasztok!

Nekem olyan gondom van, hogy a findnek nem tudok csot(pipe) | atadni.

Tehat olyasmit szeretnek hoyg egy fajlnevben lecsereljek egy betut rekurzivan. Kb. 7GB-rol lenne szo.
[code:1:a7d61a0b73]
find Esküv\?.doc -exec echo "{}" | sed -e s/\?/O/g \;
[/code:1:a7d61a0b73]
De sajnos nem megy. (a csotol(pipe) bolondul meg)
[code:1:a7d61a0b73]
find Esküv\?.doc -exec echo "{}" |sed -e s/\?/O/g \;
find: missing argument to `-exec' sed: nem lehet olvasni ;: Nincs ilyen fájl vagy könyvtár lama@khiraly:/mnt/big/kisJanos$
[/code:1:a7d61a0b73]

légyszi a pipe elé és mögé is tégy egy "-öt (elkerülendő, hogy a bash beleszóljon a levesbe) és máris menni e kell...

Zsiráf[/code]

Zsiraf: sajnos az a megoldas nem mukodik. Ilyenkor a pipe(|) -t is egyszeruen kiirja, es nem hajtja vegre.

Vegulis miq megoldasa a nyero. (koszi miq!) Beirom a kesz szkriptet, hatha masnak is hasznara valik egyszer:
[code:1:6f843b2072]
OIFS="$IFS" ; IFS=$'\n' ; for i in $(find . -name "*\?*") ; do UJ=`echo -n "$i" | sed -e 's/\?/O/g'` ; mv "$i" "$UJ" ; done; IFS="$OIFS"
[/code:1:6f843b2072]

Koszonok szepen minden segito hozzaszolast!

Udv,
Khiraly

Sziasztok!

Találtam a net-en pár gimp-script file-t, amit terminal-ból is el tudok indítani.
Ez 1 darab képfájra tökéletes, de én többre is szeretném alkalmazni, csak nem tudom hogyan.
Van egy /work könyvtáram, amiben van 100 darab png képem, és a gimpes script (ez egy rotate.sh) egy inputból csinál egy outputot. Gondoltam hogy egy shellscript/find -dal meg lehet oldalni a problémát de nem sikerült.

Kéne egy kis segítség, köszi!

rotate.sh (részlet):
[code:1:21e006772f]
...
gimp -c -i -d -b "(pngrotate $1 \"$2.png\" \"$2-rot$1.png\")" "(gimp-quit 0)"
...
[/code:1:21e006772f]

shellscriptem (ez sajnos nem jó, mert így is csak 1 képet csinál meg :(( ):
[code:1:21e006772f]
...
./rotate.sh `find ./ -name '*.png' -exec ./fileminbase.sh {} \;`
...
[/code:1:21e006772f]

// a fileminbase.sh csak a png végzödést szedi le //

Hi!

Ez a script boldugul egyebkent tobb patameterrel is? Mert ha nem, akkor ertheto, hogy miert nem megy.

Valami ilyesmi lenne jo:

find . -iname "*.png" -exec bash -c rotate.sh "{}" \;

Ez igy nem biztos, hogy megy, nem tudom, hogy a bash-t hogy kell parameterezni.

By(t)e
TBS::Antiemes

vagy valami ilyesmi:
[code:1:333430b961]for i in /home/ennevem/work/*.png; do rotate.sh $i done[/code:1:333430b961]

S.

vagy:[code:1:c57850940c]find * -name *html|xargs rotate.sh[/code:1:c57850940c] ízlés kérdése :wink:

Köszönöm szépen a segítséget, ezek alapján már remekül megy ;-)!

Üdv.:
Ádám

Sziasztok!

Nekem olyan gondom van, hogy a findnek nem tudok csot(pipe) | atadni.

Tehat olyasmit szeretnek hoyg egy fajlnevben lecsereljek egy betut rekurzivan. Kb. 7GB-rol lenne szo.
[code:1:349b36923a]
find Esküv\?.doc -exec echo "{}" | sed -e s/\?/O/g \;
[/code:1:349b36923a]
De sajnos nem megy. (a csotol(pipe) bolondul meg)
[code:1:349b36923a]
find Esküv\?.doc -exec echo "{}" |sed -e s/\?/O/g \;
find: missing argument to `-exec' sed: nem lehet olvasni ;: Nincs ilyen fájl vagy könyvtár lama@khiraly:/mnt/big/kisJanos$
[/code:1:349b36923a]

[quote:3c23982ea4="khiraly"]Sziasztok!

Nekem olyan gondom van, hogy a findnek nem tudok csot(pipe) | atadni.

Tehat olyasmit szeretnek hoyg egy fajlnevben lecsereljek egy betut rekurzivan. Kb. 7GB-rol lenne szo.
[code:1:3c23982ea4]
find Esküv\?.doc -exec echo "{}" | sed -e s/\?/O/g \;
[/code:1:3c23982ea4]
De sajnos nem megy. (a csotol(pipe) bolondul meg)
[code:1:3c23982ea4]
find Esküv\?.doc -exec echo "{}" |sed -e s/\?/O/g \;
find: missing argument to `-exec' sed: nem lehet olvasni ;: Nincs ilyen fájl vagy könyvtár lama@khiraly:/mnt/big/kisJanos$
[/code:1:3c23982ea4]

ahelyett, hogy az 'echo'-t execelned hasznald a -printf opciot.
valahogy igy:
find Esküv\?.doc -printf "%p\n" | sed...

[code:1:ef277b17df]
...
gimp -c -i -d -b "(pngrotate $1 \"$2.png\" \"$2-rot$1.png\")" "(gimp-quit 0)"
...
[/code:1:ef277b17df]

Mit csinal ez a parancs?
(Csak azert kerdezem, mert lehet, hogy nem a gimp a legjobb megoldas az adott feladatra (parancssoros kepmanipulalas)
bye Oregon

Na akkor par tevhitet eloszlatok:
1) GIMP agyuval verebre kepforgatashoz.
2) imagemagick is jo, de sajnos kinyirja az EXIF tageket, valamint ront a kepminosegen (eloszor dekodolja a kepet, elforgatja pixelrol pixelre, majd ujra kodolja - az eredeti veszteseges kodolassal)
3) legtobb kepben van egy mezo ami a kep iranyat, allasat valtoztatja... ha AZT valtoztatod meg, nem kell a kep-biteken valtoztatnod. keresd meg az exiftran csomagot, illetve png-hez valami mast.

A kerdesre a valasz:
idezek egy scriptet, ezt hasznalom image galleryk letrehozasara. Benne van minden amit szeretnel, feel free to use it.

[code:1:e3dddc4be9]#!/bin/sh
mkdir -p thumbnails
ls -1 *.jpg *.JPG *.jpeg | while read NAME
do
BASENAME=`echo $NAME | sed -e 's,\.[a-z]*$,,i' -e 's, ,_,g'`
NEWNAME="thumbnails/${BASENAME}_small.png"
test -f $NEWNAME && continue
echo Converting $NAME...
convert -resize 160x100 -quality 9 "$NAME" "$NEWNAME"
echo "<a href=\"$NAME\"><img border=0 src=\"$NEWNAME\"></a>" >> index.tmpl
done[/code:1:e3dddc4be9]

[quote:058e86515e="khiraly"]Tehat olyasmit szeretnek hoyg egy fajlnevben lecsereljek egy betut rekurzivan. Kb. 7GB-rol lenne szo.
[code:1:058e86515e]
find Esküv\?.doc -exec echo "{}" | sed -e s/\?/O/g \;
[/code:1:058e86515e]
De sajnos nem megy. (a csotol(pipe) bolondul meg)

[code:1:058e86515e]find * -name Esküv\?.doc |sed -e s/\?/O/g[/code:1:058e86515e]
vagy ez túl triviális? :wink:

[quote:a71ef6d9ba="asd"]2) imagemagick is jo, de sajnos kinyirja az EXIF tageket, valamint ront a kepminosegen (eloszor dekodolja a kepet, elforgatja pixelrol pixelre, majd ujra kodolja - az eredeti veszteseges kodolassal)
3) legtobb kepben van egy mezo ami a kep iranyat, allasat valtoztatja... ha AZT valtoztatod meg, nem kell a kep-biteken valtoztatnod. keresd meg az exiftran csomagot, illetve png-hez valami mast.

2) netpbm is jó, ha ügyes vagy, sem az EXIF-et nem nyírja ki, sem a képminőségen nem ront.
3) feltéve, hogy a megjelenítő is ismeri ezt a szolgáltatást - meglehetősen kevés ilyen böngészőt tudok, pl.

Sok-sok digi kamerával (ami beleteszi az EXIF-be a forgatást) készült kép beforgatásához, EXIF szándékos kinyírásához (illetve comment fájl tartalmával való helyettesítéséhez) a következőt használom:
[code:1:a71ef6d9ba]jhead -autorot -de *.jpg
# -autorot: rotate image based on exif data, lossless
# -de: delete entire exif
for i in *.jpg
do
jpegtopnm $i | pnmscale -xysize 600 600 | pnmtojpeg >$i.uj
# rescale it to fit in 600x600
mv $i.uj $i
# replace the original
jhead -ci comment $i
# insert exif comment from file
done[/code:1:a71ef6d9ba]
Figyelem! Az aktuális könyvtárban levő összes .jpg fájlt lecseréli olyanra, ami helyes állású, és torzítás nélkül belefér egy 600x600 pixeles négyzetbe, valamint az EXIF-et először kitörli, majd megjegyzésként beleírja a comment fájl tartalmát. Public Domain.

Hi!

Jpeg-hez a jpegtran-t kell hasznalni, az tuti nem ront a minosegen. PNG-hez meg tok mind1, hogy mit hasznalsz, az ugyis vesztesegmentes.

By(t)e
TBS::Antiemes

nem értem mit csinál a gimp, de én spec convert-tel méretezem át a képeket (convert mellesleg ImageMagickes téma és _nem_ szedi ki az exif tageket), majd mogrify-jal, ami szintén IM-es rányomom a stringssel kiszedett dátumokat a képekre (nem online galériákhoz kellenek, hanem anyáméknak).
valamelyik észak-ausztrál linux group oldalán a minap láttam egy zope-os galériát és szerintem a korrektség netovábbja volt amit ott műveltek :) a dátumot nem tudom hogyan szedték ki (jhead-del, imagemagick-kel is ki lehet és IM-hez van perl, ruby, python binding), de miután kiszedték, CSS-sel "position: relative"-vel szépen megjelenítik a fotók bal felső sarkában a dátumot. így ugye a képbe nem kerül bele a dátum, ellenben megjelenik és azt a látszatot kelti, mintha a fotókon lenne a dátumozás. hajrá CSS :)

[quote:d266e06ca1="wry"]valamelyik észak-ausztrál linux group oldalán a minap láttam egy zope-os galériát és szerintem a korrektség netovábbja volt amit ott műveltek :) a dátumot nem tudom hogyan szedték ki (jhead-del, imagemagick-kel is ki lehet és IM-hez van perl, ruby, python binding), de miután kiszedték, CSS-sel "position: relative"-vel szépen megjelenítik a fotók bal felső sarkában a dátumot. így ugye a képbe nem kerül bele a dátum, ellenben megjelenik és azt a látszatot kelti, mintha a fotókon lenne a dátumozás. hajrá CSS :)

URL?

[quote:a153cf2476="vmiklos"]
[code:1:a153cf2476]find * -name Esküv\?.doc |sed -e s/\?/O/g[/code:1:a153cf2476]
vagy ez túl triviális? :wink:

Lehet az a baja;)

Viszont igy nemtom az eredeti nevet megorizni.

mv Esküv\?.doc EsküvO.doc
Ez lenne a cel.

A te kododdal az a baj, hogy az eredetit(Esküv?.doc) nem marad meg. Na majd meg turom a netet.

Udv,
Khiraly

[quote:ec942700ad="Oregon"][quote:ec942700ad="wry"]valamelyik észak-ausztrál linux group oldalán a minap láttam egy zope-os galériát és szerintem a korrektség netovábbja volt amit ott műveltek :) a dátumot nem tudom hogyan szedték ki (jhead-del, imagemagick-kel is ki lehet és IM-hez van perl, ruby, python binding), de miután kiszedték, CSS-sel "position: relative"-vel szépen megjelenítik a fotók bal felső sarkában a dátumot. így ugye a képbe nem kerül bele a dátum, ellenben megjelenik és azt a látszatot kelti, mintha a fotókon lenne a dátumozás. hajrá CSS :)

URL?

például:
http://www.darlug.org/Gallery/InstallFest2003/photoalbum_photo_view?b_start=0
de itt nem ők ügyesek, hanem a zope programozói rukkoltak elő evvel az übermegoldással :) ha nekem valaha szükségem lesz egy galériára igen nagy valószínűség szerint emelett a CSS-es megoldás mellett fogok dönteni.

khiraly: nem értem miért túrod a netet, a fentebb javasolt findos printf-fel mi volt a gond?

for ORIG in `find /path/ -name 'Esk*.doc' -printf %p`; do
UJ=`echo -n "$ORIG" | sed -e 's/\?/O/g'
mv $ORIG $UJ
done

ez azonban olyan fileokra nem fog menni amelyek spacet is tartalmaznak. arra vagy kipróbálhatod azt, hogy a két `` köré teszel dupla idézőjeleket is, vagy külön scriptbe pakolod az átnevezést és -exec-cel meghívod a külön scriptet.
üdv.