Newsgroup: it.comp.macintosh
Titolo: filtro di ricerca in base all'orario

Salve a tutti,
qual č il modo migliore, se ce n'č uno, di sapere quali file sono stati
aggiunti e/o modificati in un determinato orario? Esempio: voglio
conoscere modifiche e/o aggiunte nella cartella Pippo effettuate dalle
10 alle 11 di questa mattina. Si puň?
TIA
-- 
Vivo nel terrore di non essere frainteso
(Oscar Wilde)

 10 alle 11 di questa mattina. Si puň?
mai provato mela-f ?
ciao

 mai provato mela-f ?
Qualche volta mi ci č cascata la mano, sě. Il fatto č che non ho notato
un range piů stretto di 24 ore, e se nelle ultime 24 ore ho lavorato
sodo, i file che appaiono sono un miliardo. Certo, con un po' di
pazienza si arriva anche ad individuare le modifiche dell'orario voluto,
ma non sembra esistere un criterio di ordinamento che agevoli la ricerca
visiva.
-- 
mailto: y = i
----------------------------------------


 visiva.
vero... non l'avevo notato...
probabilmente c'č quache comando da terminale, ma di solito io, oltre al 
giorno, seleziono il tipo di file (eventualmente l'estensione) e le 
dimensioni. il campo si riduce notevolmente
ciao

 dimensioni. il campo si riduce notevolmente
Per le ricerche - diciamo cosě - piů consuete sono piccoli accorgimenti
che uso anch'io, ma nel mio caso di quei file non so niente di niente;
potrei risalire unicamente all'orario di creazione/modifica.


 find /path/to/dir -newer /path/to/oldest -older /path/to/newest
Benissimo, ma questo deve toccare ogni inode dell'albero, che e` un po'
lento... insomma sarebbe la soluzione Unix classica.  Mi chiedo come si
potrebbe usare mdfind (che usa i metadati gia` raccolti
dall'indicizzatore di spotlight) allo stesso scopo, ma non so dove
leggere la sintassi delle query... forse qualcosa tipo:
mdfind -onlyin /path/to/dir 'kMDItemFSCreationDate >= ...
ma non so la sintassi con cui specificare una data ne` quella con cui
richiedere un AND nella query...
Alex

 Objective C. Qualche baldo volontario del C? :-))
Se non ci si mette nessun altro posso provarci io, ma pensavo a bash o
Python piuttosto che non a ObjC... tanto il grosso del lavoro lo fara`
mdfind, ottimizzare quel che ci sta attorno par dunque futile!-)
Alex

 si trovera`.  O c'e` nella parte che hai citato e mi e` sfuggito?
Ci sono quasi, ma le date (e, SPERO, ore... se le ore non sono
registrate fra i metadati son guai!) sono rappresentate da un intero di
cui mi sfugge la logica.
Vedere una query e` facile: la prepari da Finder con Mela-F, la salvi,
poi vai al folder Saved Searches della tua home e li` la trovi come
Smart Folder, vai di Get Info e leggi la query.  Ad esempio, una query
per i file di qualche giorno fa e`:
(kMDItemFSContentChangeDate  >= 153820800) &&
(kMDItemFSContentChangeDate  <= 154322900)
piu` qualche pinzillacchera per escludere email e vcard.
Il problema e` che non so cosa rappresentino quei numeri... non sono
normali timestamp Unix.  Ho dunque pensato bene di chiedere (tanto per
me e` ora di andare a dormire!-) visto che magari per chi e` familiare
con Applescript o un qualche framework ObjC o che so io la risposta e`
ovvia...
Alex

 Ci sono quasi, ma le date (e, SPERO, ore... se le ore non sono
Allora, a futura memoria: le date (E ore) sono registrate come NSDate, e
mdfind le vuole in forma intera "numero di secondi dall'1/1/2001" (non
difficile da ricavare dal "numero di secondi dall'1/1/1970" tipico di
Unix;-).
Ho messo su 
http://www.aleax.it/Python/trova.py
 un piccolo script
Python, usabile da Terminal da chiunque abbia Tiger, per trovare tutti i
file entro un certo directory modificati dopo una certa data-e-ora (e
opzionalmente anche, prima di un'altra data-e-ora).  Un po' rigido e
goffo, ad es. NON esclude email e vcard come invece fa il Mela-F del
finder, e non permette di impostare altri criteri, solo il folder di
base e le date-e-ore di interesse, ma ovviamente si puo` facilmente
arricchire (magari anche dotare di una GUI...;-) se c'e` interesse...
Alex

 ma i blocchi vengono determinati da cosa? Dall'indent?
Esattamente

 ***AAAARGHHH***!!
Ehi, e' una delle belle cose del linguaggio!
 - ∞

 Io lo salvo, tu editi una riga e non funziona una ceppa.
Con un editor pirla magari si'. SubEthaEdit che e' l'ultimo della calca
fa l'autorilevamento di queste caratteristiche (almento "tab o spazi" e
il finale di linea). E se lo fa lui, non oso immaginare BBEdit o
emacs...
 - ∞

 -- merita anche
leggere il libretto che questo articolo riassume, "The Cognitive Style
of Powerpoint").
Riassumendo, Tufte dice che un principio cruciale nel progettare la
modalita` di visualizzazione dell'informazione e` NIENTE PIXEL SPRECATI:
niente ornamentazioni ne` altri pixel che non trasmettono informazione
al lettore.  Ogni pixel che non aggiunge informazione TOGLIE
informazione, perche` distrae una minuscola frazione dell'attenzione del
lettore dai pixel CHE CONTANO... quelli che trasmettono informazione,
appunto.
Wired, mesi fa, fece un numero speciale dedicato in buona parte a
critica e redesign della homepage di Google.  Dieci figure importanti
nel settore del webdesign offrirono in separati articoli diverse idee su
come riprogettare la pagina, ecc, ecc, e almeno la meta` di loro a un
qualche punto citava Tufte.  Quindi Wired provo` a chiedere un articolo
anche a Tufte.  E quest'ultimo rispose invece con un solo paragrafo, che
Wired peraltro pubblico`: "non ho niente da cambiare, da criticare ne`
da riprogettare: quella pagina e` esattamente come l'avrei fatta io".
Tanto per dare un'idea del minimalismo, non fanatico ma spinto, cui
porta l'applicazione delle idee di Tufte;-).
Ebbene, secondo Tufte Python segue il principio "niente pixel sprecati".
Scrivere BEGIN all'inizio ed END alla fine, quando comunque per buona
prassi il contenuto va indentato lo stesso, e` ridondante: spreca pixel,
pixel che non trasmettono informazione, quindi distrae il lettore da
quello che conta, dai pixel che trasmettono informazione.
Purtroppo, anche se ho (finalmente!) incontrato di persona sia Knuth sia
Tufte nella stessa occasione (il party "5.5.5" di Google pochi mesi fa),
non sono riuscito a manovrare per averli a tiro entrambi simultaneamente
(troppe distrazioni... tequila, birra, margarita, musica messicana a
volume troppo alto, e per ciascuno dei due un prevedibile codazzo di
seguaci intenti a non perdere una parola del Maestro...) cosi` da
sentire se Knuth (visto che alla fin fine l'idea e` sua) accetta o meno
l'analisi di Tufte, relativamente al PERCHE` e` un'idea cosi` buona
quella di usare solo l'indenting, senza graffe ne` begin/end ne` altro
per demarcare ridondantemente la stessa informazione sul blocco.
Alex

 semplicemente perche' questi sono gli strumenti che conosco :-)
Considerando che la quantita` di elaborazioni necessarie e` cosi`
microscopica, magari e` meglio fare tutto in Applescript, se in AS va
comunque fatta la GUI.  Se c'e` ad esempio un qualche control/widget
gia` esistente per immettere una data-e-ora (non solo la data!-), gia`
questo toglierebbe una bella fetta delle gia` poche elaborazioni che
faccio ora (parsing di data-e-ora da stringa a numero).
Quel che mi chiedo e` se c'e` modo di fare invece (qualsiasi linguaggio,
tanto prima o poi ObjC devo pure impararlo;-) una specie di plugin che
spotlight o la mela-F del finder potrebbero poi usare IN ADDIZIONE alle
tante altre regole sulla cui base gia` sanno filtrare le ricerche.  Se
no, che so, trovare "tutte le IMMAGINI modificate fra le 9 e le 11"
resta comunque una pizza (o si aggiungono mille regole allo script che
sa filtrare in base all'orario, si duplica tutta la GUI che gia` Mela-F
saprebbe offrire, ecc ecc... oppure, se si puo` fare un plugin di
"filtro", con quello solo, cioe` aggiungendo un bit a quel che gia`
hanno Spotlight/Finder, si risolverebbe tutto...).
Alex

 Io lo salvo, tu editi una riga e non funziona una ceppa. Mai piu` senza!
Se vuoi cautelarti contro misture arbitrarie di tab e spazi, basta usare
(nella prima linea dove si scrive l'hashbang, !#/usr/bin/python) il flag
-t (se vuoi solo dei warning per queste misture; -tt se preferisci che
il compilatore le consideri errori).  In un ambiente dove ci si deve
cautelare da una mistura di editor, e` consigliabile, anche se non cosi`
indispensabile come ad es. l'uso del flag -w lo e` con Perl.
"Vivendo" da anni in ambienti dove "nessuno" salva dei tab entro i file
sorgenti (in generale e` facile configurare i vari strumenti di
configuration-confrol, da subversion a perforce, in modo che diano
errore ovvero espandano automaticamente i tab in questi casi... proprio
come e` facile configurare i vari editor per espandere i tab in fase di
salvataggio del file), io non uso abitualmente -t, ma non e` certo un
grosso problema.
In Python 3.0, la futura versione in cui sara` permesso introdurre delle
incompatibilita` con il passato, spero che fra le varie semplificazioni
ci sara` quella di vietare, semplicemente, l'uso di tab per l'indenting.
Alex

 
http://www.aleax.it/Python/trova.py
Traceback (most recent call last):
  File "/Users/fabrizio/Desktop/trova.py", line 59, in ?
    main(sys.argv)
  File "/Users/fabrizio/Desktop/trova.py", line 35, in main
    print '%0 <dir-radice> <non-prima-di> [ <prima-di> ]' % argv[0]
ValueError: unsupported format character '<' (0x3c) at index 3
Pecchhhé...?
-- 
Salutandovi indistintamente

 e quindi usera` gli spazi o scoprira` dei delimitatori di blocco?
Spazi.  Regredire dalla grande idea di Knuth, che e` stata in Python da
sempre, e` impensabile.
Alex

 precetti dei "profeti K&R", come direbbe Linus ;))) non guasterebbero.
Guasterebbero eccome.  Ruby usa 'end', minuscolo, che secondo me e` gia`
meglio degli eccessi di punteggiatura; ma gia`, Ruby e` un po' un
compromesso fra Perl e Python (con tanto Smalltalk in piu`;-)... troppo
perloso per i pitonisti, troppo pitonico per i perlomani, ma il suo
seguito se lo sta facendo, specie grazie a Rails.
Cmq, sia chiaro che io non sto cercando di convertire proprio nessuno:
chi e` felice e contento con perl, ruby, objc, applescript, intercal,
basic, o apl, per carita` resti nella sua parrocchia e io resto nella
mia.  Sinche` facevo il consulente potevo anche pensare che, piu` utenti
di Python, piu` potenziale business futuro per me; avendo cambiato
lavoro, preferirei invece che Python la piantasse di diffondersi... meno
aziende usano Python, infatti, meno e` probabile che emerga un
concorrente per Google (che notoriamente su Python, Java e C++ impernia
il proprio software -- apposta ha assunto me, e anche nomi piu`
prestigiosi del mio nell'universo di Python...).  Dico solo che la
critica a Python basata sull'uso dell'indenting e` la piu` frequente da
parte di chi Python non l'ha mai usato (quasi tutti: a me andava
benissimo, ma, cosa insolita, conoscevo gia` Haskell prima di Python,
quindi l'idea dell'indenting normativo non mi era nuova!), e senza
nessuna eccezione sparisce dopo che il soggetto ha usato Python sul
serio per un mesetto, se non prima.  Suggerisco dunque di trovare
ragioni meno discutibili per non provare Python, tipo l'avversione per i
rettili o per l'humor britannico (visto che in realta` il nome del
linguaggio viene da Monty Python, i serpenti non c'entrano!) o il fatto
che e` stato inventato e sviluppato in Europa e tutti sanno che i
linguaggi buoni vengono solo dagli USA come perl (o al limite dal
Giappone come ruby, l'importante e` l'esotismo, diamine...!-).
Alex

Mad Prof <nos...@mail.invalid> wrote:

Urk -- perche` ho fatto la scemata di fare l'upload della versione
sbagliata, e me ne scuso profondamente... quel %0 dovrebbe essere invece
un %s.  Ho appena fatto l'upload della versione con questa correzione,
ripeto le scuse e invito a riscaricare:-(
Alex

 ripeto le scuse e invito a riscaricare:-(
Dai, per stavolta ti perdono... ;-) Comunque non riesco a farlo
funzionare. Se lo lancio liscio, senza argomenti, mi esce:
/Users/fabrizio/Desktop/trova-1.py <dir-radice> <non-prima-di> [
<prima-di> ]
<non-prima-di> e <prima-di> sono date (e opzionali ore)
ciascuna con la sintassi [YY/]MM/DD[:hh[:mm[:ss]]]
Se provo a dare come argomento delle date (tipo 05/11/24 05/11/25), mi
risponde:
Directory non valido: '/Users/fabrizio/05/11/24'
-- 
Salutandovi indistintamente

 beh, dopotutto allora non sono io ad essere strano :-DDD
No, come dicevo e` tipico, e infatti mille volte ho visto coi miei occhi
il fenomeno della sparizione di questa critica, spesso anzi sostituita
dall'opposto entusiasmo;-).
Alex

Mad Prof <nos...@mail.invalid> wrote:

E allora si vede che quel messaggio che di da` quando gira "liscio" non
e` chiaro, perche` quel che intende e`: PRIMO argomento obbligatorio il
directory radice della ricerca, POI una data (eventualmente un'altra
facoltativa).  Come potrei esprimerlo piu` chiaramente?  Magari la
notazione <dir-radice> con i  < e > non e` chiara?
Prova ad esempio
trova.py ~ 11/24
ed elenchera` i file (compresi messaggi email ecc) da qualsiasi parte
nella tua home modificati il giorno 24 novembre o successivi; e
trova.py ~ 11/24 11/25
per quelli modificati il 24 novembre (non il 25 e giorni successivi).
Alex

 trova.py ~ 11/24
Traceback (most recent call last):
  File "/Users/fabrizio/Desktop/trova-1.py", line 59, in ?
    main(sys.argv)
  File "/Users/fabrizio/Desktop/trova-1.py", line 46, in main
    nonprima = data_e_ora(argv[2])
  File "/Users/fabrizio/Desktop/trova-1.py", line 29, in data_e_ora
    return int(time.mktime(tuple(datim)+3*(0,))-riferimento)
TypeError: an integer is required
-- 
Salutandovi indistintamente

 l'undefined che valgono false.
Ah, grazie.  Allora quel particolare bug c'era solo nella versione Perl
del codice che hai postato, non in quella Javascript.  Buffo, pero`, che
JS imiti Perl quasi ovunque sulla conversione implicita fra stringhe e
numeri, ma non nei controlli di verita` dove invece assomiglia piu` a
Python (dove sono falsi None, il numero 0 e la stringa vuota, come anche
qualsiasi contenitore vuoto).
Alex


"""
\d  Match a digit character
"""
e anche se "a digit character" non e` qui definito, da quando in qua
questa classe include anche punti, virgole, e segni di piu` e meno,
oltre alle cifre?  Anche provando in pratica, vedo:
Helen:~/py/peps alex$ perl -e'$x=("2"=~/\d/)?"y":"n";' -e'print "$x\n"'
y
Helen:~/py/peps alex$ perl -e'$x=("."=~/\d/)?"y":"n";' -e'print "$x\n"'
n
Non capisco dunque da dove venga questa informazione su cosa \d matcha.
Visto che sei sempre fra i piu` accurati nelle informazioni che qua
posti, se questa e` invece inaccurata sembra un brutto segno, e penso
che sia meglio che lasciamo perdere...
Alex

 TypeError: an integer is required
Eh gia`, la versione che c'e` adesso e` quella con quel bug, mentre
quella che c'era prima aveva l'altro bug... si vede proprio che
l'eccesso di tacchino mi stordisce.  Ora ho la versione senza ne` l'uno
ne` l'altro bug ma 
aleax.it
 non mi risponde quindi non posso farne
l'upload, aggiornero` quando la rete me lo permettera`, sorry.
Alex

 wrote:

OK, 
aleax.it
 si e` scantato, ho appena fatto un altro upload di trova.py
senza nessuno dei due bug che hai scoperto...
Alex

 senza nessuno dei due bug che hai scoperto...
Confermo: ora va.
-- 
Salutandovi indistintamente

 Confermo: ora va.
Phew, era ora... scusa per i due bug!
Alex

 Phew, era ora... scusa per i due bug!
Figurati. Piuttosto, grazie a te per lo script...
-- 
Salutandovi indistintamente