Sziasztok. Régebben használtam a find parancsot arra, hogy speciális szöveget tartalmazó filet töröljön, úgy, hogy az útvonalon ahol keresem bizonyos mappák váltózóak.
Pl.:
/var/vmail/mx2.valami.hu/lab/Maildir/cur
/var/vmail/mx2.valami.hu/fas/Maildir/new
/var/vmail/mx2.valami.hu/naos/Maildir/cur
Vagyis itt lenne egy * a Maildir előtt, és 3db ? a Maildir után.
Régebben mintha ez nekem működött volna:
find /var/vmail/mx2.valami.hu/*/Maildir/??? -type f -mtime -2 -exec grep -l "direct.ro" {} \; -delete
Most viszont kiírja, hogy no such fil or directory. Az biztos, hogy a *-al és ?-elekkel van gondja, mert ha beillesztem a konkrét útvonalat, akkor megcsinálja.
Változott volna a find command?
Megoldás: Debian alatt nem a bash, hanem a dash az alapértelmezett, ezért a fenti parancsot be kell illeszteni egy bash -c "" közé.
- 390 megtekintés
Hozzászólások
find /ittkeress -parameterek -print0|xargs -0 rm
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
Ez nem a jelenlegi problémára megoldás, mert a probléma, hogy az útvonalat nem fogadja el, mert zavarja a speciális karakterek.
- A hozzászóláshoz be kell jelentkezni
Szerintem find / --iname "a patterned idézőjelben, hogy a shell ne oldja fel a csillagot meg a kérdőjeleket" ... És ja, a print0 általában jó ötlet.
- A hozzászóláshoz be kell jelentkezni
Az iname-re azt írja, hogy inkább iwholename-et akarhatok, mert van benne / jel. VIszont arra 0 találatot ad ki. De ha konkrét útvonalat adok meg, akkor sem ad ki semmit.
find / -iwholename "/var/vmail/mx2.valami.hu/naos/Maildir/cur" -type f
- A hozzászóláshoz be kell jelentkezni
Nekem működik ez is, ha bepasztálom, meg a *ozás is:
[root@1175a50f49c4 /]# mkdir -p /var/vmail/mx2.valami.hu/lab/Maildir
[root@1175a50f49c4 /]# mkdir -p /var/vmail/mx2.valami.hu/fas/Maildir
[root@1175a50f49c4 /]# mkdir -p /var/vmail/mx2.valami.hu/naos/Maildir
[root@1175a50f49c4 /]# touch /var/vmail/mx2.valami.hu/lab/Maildir/cur
[root@1175a50f49c4 /]# touch /var/vmail/mx2.valami.hu/fas/Maildir/new
[root@1175a50f49c4 /]# touch /var/vmail/mx2.valami.hu/naos/Maildir/cur
[root@1175a50f49c4 /]# echo "akarmiakarmi direct.ro barmi barmi" > /var/vmail/mx2.valami.hu/fas/Maildir/new
root@1175a50f49c4 /]# find / -iwholename "/var/vmail/mx2.valami.hu/naos/Maildir/cur" -type f
find: ‘/proc/tty/driver’: Permission denied
/var/vmail/mx2.valami.hu/naos/Maildir/cur
# nyilván érdemesebb volna a find /var/vmail/mx2.valami.hu ...
[root@1175a50f49c4 /]# find / -iwholename "/var/vmail/mx2.valami.hu/*/Maildir/???" -type f
find: ‘/proc/tty/driver’: Permission denied
/var/vmail/mx2.valami.hu/lab/Maildir/cur
/var/vmail/mx2.valami.hu/fas/Maildir/new
/var/vmail/mx2.valami.hu/naos/Maildir/cur
# A keresés is megy:
[root@1175a50f49c4 /]# find / -iwholename "/var/vmail/mx2.valami.hu/*/Maildir/???" -type f -print0|xargs -0 grep -l direct\.ro
find: ‘/proc/tty/driver’: Permission denied
/var/vmail/mx2.valami.hu/fas/Maildir/new
# Egyébként ezt így is lehet (nyilván, ha sok van, akkor a shell be fog sírni az arg lenre vagy valamire):
root@1175a50f49c4 /]# grep -l direct.ro /var/vmail/mx2.valami.hu/*/Maildir/???
/var/vmail/mx2.valami.hu/fas/Maildir/new
# És megy az eredeti is, de nyilván valójában itt is a shell keres.
[root@1175a50f49c4 /]# find /var/vmail/mx2.valami.hu/*/Maildir/??? -type f -exec grep -l "direct.ro" {} \;
/var/vmail/mx2.valami.hu/fas/Maildir/new
Ez egyébként egy alma:9 konténer (ez volt kéznél).
[root@1175a50f49c4 /]# find -version
find (GNU findutils) 4.8.0
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2)
[root@1175a50f49c4 /]# bash --version
GNU bash, version 5.1.8(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
- A hozzászóláshoz be kell jelentkezni
A new és cur is könyvtár, amiben vannak a mail fileok, és azokban keresnék tartalmat. Tehát:
/var/vmail/mx2.valami.hu/fas/Maildir/new
/var/vmail/mx2.valami.hu/fas/Maildir/cur
Ezek mind könyvtárak, és benne vannak az emailek. És ezért a példád nekem csak a cur és new könyvtárakat adja meg, nem a benne levő fileokat.
A végén írtad ezt is: find /var/vmail/mx2.valami.hu/*/Maildir/??? -type f -exec grep -l "direct.ro" {} \;
Nah ez nekem abszolút nem megy. Régebben rémlik, hogy ez működött, mondjuk 1-2 éve, de nekem most hibára fut.
- A hozzászóláshoz be kell jelentkezni
A new és cur is könyvtár, amiben vannak a mail fileok, és azokban keresnék tartalmat. Tehát:
akkor '/var/vmail/mx2.valami.hu/*/Maildir/???/*' ?
- A hozzászóláshoz be kell jelentkezni
Szerintem ez működne:
find /var/vmail/mx2.valami.hu -name Maildir
Update: a -name parancsban működnek a speciális karakterek (*?), idézőjelbe is rakhatod
- A hozzászóláshoz be kell jelentkezni
De így csak könyvtárakat keres ahogy nézem. A benne levő fileokról tudomást sem vesz, így vizsgálni sem tudom azok tartalmát.
- A hozzászóláshoz be kell jelentkezni
Figyu, én most kipróbáltam az eredetit is (nyilván más path-al) és működik a csillag az útvonalban is:
find /home/gejzir/work/*/node_modules -name *.js
...
/home/gejzir/work/xxxmgt/node_modules/big.js
/home/gejzir/work/xxxmgt/node_modules/des.js
/home/gejzir/work/xxxmgt/node_modules/ipaddr.js
/home/gejzir/work/xxxmgt/node_modules/bn.js
/home/gejzir/work/xxxmgt/node_modules/hash.js
...
update: még így is...
find /home/gejzir/work/*/node_modules/*/node_modules -name *.js
- A hozzászóláshoz be kell jelentkezni
Nem értem. Akkor lehet, hogy a debian-ban valami hybrid verzió van most a find-ból?
- A hozzászóláshoz be kell jelentkezni
én úgy emlékeztem, hogy a ?-et, és a *-ot nem a find értelmezi, hanem a bash. így ha nem a bash az interpreter, akkor nem várható, hogy működjön. de ez csak egy tipp
4 és fél éve csak vim-et használok. elsősorban azért, mert még nem jöttem rá, hogy kell kilépni belőle.
- A hozzászóláshoz be kell jelentkezni
Azért kell helyette a -name valamelyik alfaja. Bonyább esetben a -regex. Mert a shell globbing egyébként se fog működni, ha sok file van, pláne nem gyorsan.
- A hozzászóláshoz be kell jelentkezni
Óóó bakker nálad a pont kassaiviktor! Ez lesz a baj, mert Debian 12 alatt nem a bash a default, hanem a dash.
Vagyis a megoldás bash -c "" közé rakni a parancsot, és már rendben le is fut. Köszi! :)
- A hozzászóláshoz be kell jelentkezni
dash-ban ugyanúgy mennie kéne, ugyanis ez nem bash specifikus viselkedés, kb V7 UNIX óta minden Bourne-shell specifikus shell így működik.
Amúgy ne "-ek, hanem '-ok közé tedd :-)
- A hozzászóláshoz be kell jelentkezni
sh, ash, bash, csh, dash, ksh*, yash, zsh - ezen a szinten a globbing ugyanaz kb mindenkinél.
- A hozzászóláshoz be kell jelentkezni
1) ha egy parancsban nem takart * és/vagy ? és/vagy [kriksz-kraksz] szerepel, akkor ezeket az általad használt shell fogja helyettesíteni az illeszkedő nevekkel.
2) azaz ha beírod az eredeti find parancsodat és elé írsz egy echo parancsot, akkor látni fogod, hogy igazából milyen parancsot is akarnál futtatni
3) következésképpen más hiba van, hiszen azt írtad, hogy ha fizikailag beírod a neveket, akkor jó.
==> én ebből arra következtetek, hogy
- vagy sima PEBKAC
- vagy abnormális shell
- vagy abnormális shell beállítás (pl. "set -o noglob") - kérhetnék egy "set -o" kimenetet a hibás shellben?
vagy valami olyan körülményt elhallgatsz (akár akaratlanul), ami miatt van ez a hiba.
Amúgy azt a hibaüzenetet nagy eséllyel azért adja a find, mert megkapja a nyavalyás globbing karaktereket - és a *keresési hely nevében* nem fogja neked kiértékelni (míg pl. a -name vagy -iname után megtenné).
Amúgy krozoo meglátása a túl sok fájlnévvel jó meglátás lenne, csak akkor a shell adna hibát (a find indítása nélkül) és nem "no such file .." lenne hanem "arg list too long".
Megtennéd, hogy lefuttatod a parancsot és kopipészttel beraknád azt a 3 sort, ami erre vonatkozik
$ find /x*y*lofasz/alma/fa?? -stb
hibaüzenet
$
stílusban? Ugyanis mivel magát a hibaüzenetet is elgépelted, nyilván más is lehet hiba, ami neked nem tűnt fel, de esetleg itt valaki észreveszi.
- A hozzászóláshoz be kell jelentkezni
Amúgy krozoo meglátása a túl sok fájlnévvel jó meglátás lenne, csak akkor a shell adna hibát (a find indítása nélkül) és nem "no such file .." lenne hanem "arg list too long".
Bocsánat, nem akartam azt implikálni, hogy a konkrét hibája e-miatt volt, az valami más, mert igen, ilyenkor arg list hosszra szokás panaszkodni. Csak a maildir tipikusan az a hely, ahol ez előjön könnyen, szóval jobb kerülni.
(Ugyanitt, fent dupla idézőjeleztem mindenhol, ahol simát kellett volna, elnézést)
- A hozzászóláshoz be kell jelentkezni