Newsgroup: it.comp.os.linux.sys
Titolo: find grep e caratteri non-ascii

Salve a tutti,
   ho la necessità di trovare tutti i file il cui nome contenga
caratteri non-ascii
ho provato questi:
$ ls -1
aoeiu
àòèìù
in questo esempio dovrei trovare àèìòù
$ ls -1 | grep [a-z]
aoeiu
àòèìù
perchè a-z fa il match anche su àèìòù?
come faccio allora a trovare i caratteri ascii < 128?
gli esperimenti li faccio con ls ma il mio obiettivo finale è
applicare
grep al comando find
quindi find /directory_in_cui_cercare | grep <....>
grazie in anticipo per qualunque suggerimento

 mi sembra funzionare.
  mi spiego meglio, voglio trovare tutti i file il cui nome contenga
caratteri non-ascii
dalla a accentata (à) ai vari caratteri tedeschi (la o con i due punti
sopra etc.) o francesi
  cioè se io avessi
unfile
unaltro_file_àù
  dovrei trovare solo  "unaltro_file_àù"
  chiaramente qualunque consiglio per un metodo alternativo è bene
accetto
grazie per aver risposto

   dovrei trovare solo  "unaltro_file_àù"
Mi pare che quello che ha incollato fgr facesse proprio questo. Io
estendo un po': e se facessi un | grep [àèéìòùÀÈÉÌÒÙçÇøØæÆßŋŊñÑ] ?
Oppure vorresti un qualcosa di "generale"?
David
- --
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.20 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iD8DBQFFI9Vs5sXXcRsFI+cRAjMbAKC9Rtudq62y7+BwowCzOzwUAuFspgCfZYB7
tkT8xAeNorPXuFV/p+2h6MQ=
=VU6d
-----END PGP SIGNATURE-----

 Oppure vorresti un qualcosa di "generale"?
 esatto la mia idea definire i caratteri ascii quindi da 32-126 (in
decimale)
e negarla con -v
 ma non so come dire a grep "i caratteri il cui codice ascii è
compreso tra 32 e 126"
grazie per aver risposto

 grazie per aver risposto
Puoi farti un mini filtro in python utilizzando UTF8; adesso è un po'
che sono a digiuno di python ma sono abbastanza sicuri che si può fare.
Nota: i caratteri UTF8 coincidono con gli ascii fino al 128 e con
iso-8859-1 fino a 256.
-- 
Lorenzo `paulatz' Paulatto
Trieste
``Grandissima mi par l'inezia di coloro che vorrebbero che Iddio avesse
fatto l'universo più proporzionato alla piccola capacità del lor discorso.''
     --Galileo Galilei (Opere VII)

 quindi find /directory_in_cui_cercare | grep <....>
Nota che find puo` cercare file in base ad 
una espressione regolare.


perfetto, grazie per l'idea, ho buttato giù questo:
#!/usr/bin/python2.4
import sys
inp = sys.argv[1:]
inp = ''.join(inp)
try:
    unicode(inp)
except Exception, e:
    print inp
da usare con
$ find ./ -exec  ~/test-nome-file.py '{}' \;
stampa a video solo i file con caratteri "strani"
grazie a tutti

 alla regxp tutti i caratteri incriminati.
  si ma credo sia impraticabile è molto più facile scrivere
[a-zA-Z0-9 _-] [sicuramente ne manca qualcuno :)]
  e negarlo (penso sempre a grep -v) che non il contrario
comunque ho risolto con python, se qualcuno volesse darci
un'occhiata/correzione ...
grazie

 $ find ./ -exec  ~/test-nome-file.py '{}' \;
Molto complicato e sicuramente problematico.
Credo che ti avevano suggerito qualcosa del tipo:
find . -print | filtro.py
(perche' Python, non era meglio Perl?)
Io invece ti propongo
(LC_ALL=C; 
find /mnt/G/ -not -regex '[-_.:+*=/()$~ 0-9a-zA-Z^]*')

 far ciucciare alla regxp tutti i caratteri incriminati.
Ti sbagli; man grep consiglia:
LC_ALL=C

 find /mnt/G/ -not -regex '[-_.:+*=/()$~ 0-9a-zA-Z^]*')
   è in fase di approvazione "[-_.:,+*=/()$~ 0-9a-zA-Z^#@'%]*"
per considerare anche "contratto d'assistenza, 2006"
   grazie

 $ find ./ -exec  ~/test-nome-file.py '{}' \;
Avviare cinque milioni di volte uno script ti 
sembra una alternativa valida?
Io vado!

 e negarlo (penso sempre a grep -v) che non il contrario
Sì ma se non cambi il locale prima (come fa giustamente notare
mallin...grazie per la dritta, stavo leggiucchiando la man page ma non ci
avevo fatto caso!) a, á, à, ä sono tutte dentro [a-z].
-- 
Vide

 (perche' Python, non era meglio Perl?)
...sono d'accordo: Perl mi sembra piu' adatto al caso (ed efficiente).
=== 
trova.pl
 ==========
#!/usr/bin/perl
use strict;
use File::Find;
my $sStartDir = "./";            # directory di partenza
my $sReMatch = qr /[\x80-\xff]/; # regular expression
# togli il "! -d && " sotto per includere anche le dir.
find( sub { print $File::Find::name."\n" if (! -d && /$sReMatch/); }, 
$sStartDir);
=============
chmod +x ./
trova.pl
Quindi il comando '
trova.pl
' dovrebbe fare allo scopo iniziale (trovare 
car >= 128) sostituendo il 'find . -print | filtro'
...che poi, sempre con Perl, poteva anche semplicemente essere:
find . -print | perl -ne 'print if /[\x80-\xff]/;'
(questo per non stare ad impazzire troppo con il grep :) )
Ciao
-- 
Cybertoldo
Per rispondermi via email, sostituisci moc.liamg con 
gmail.com

 
:)
   ed infatti l'alternativa è stata accettata "al volo",
ho pure cancellato lo script python ...
   grazie ancora

Vide ha scritto:

  la pagina man che ho letto io era diversa da questa:
(che ho  cercato adesso con google per trovare i riferimenti alle
variabili di ambiente)
http://www.tu-berlin.de/zrz/dienste/www/manpages/grep.html

 ho pure cancellato lo script python ...
(sei andato a fiducia: neanche l'hai provata :) )
Ma gli esempi in Perl che ti ho postato ieri non sono piaciuti?


 Ma gli esempi in Perl che ti ho postato ieri non sono piaciuti?
   se posso fare tutto con find è sicuramente preferibile,