Newsgroup: it.comp.os.linux.iniziare
Titolo: problema con filenames con spazi

La seguente linea
find / -path '/sys' -prune -o -path '/proc' -prune -o -mmin -60 -type f 
| grep -v "/\." |xargs  stat --format="%Y %y %n"|sort -r | awk '{print 
$2, substr($3,0,5), $5}' 2> /dev/null |less
restituisce tutti i file modificati nell'ultima ora, ordinati dal piï¿œ 
recente al meno recente. I file nascosti non vengono elencati.
Ma non funziona con nomi di file che contengono spazi.
Sto pasticciando un po' per esempio aggiungendo le virgolette nel 
formato di stat, ma non ï¿œ il massimo, anche perchï¿œ comunque per awk devo 
specificare un separatore diverso... ecc.
Ah a proposito di stat, se doveste provare, se il vostro stat ï¿œ 
leggermente diverso la cosa potrebbe non funzionare a dovere.
Qualcuno ha una soluzione elegante?
Ciao e grazie!
  Marco
-- 
http://www.flickr.com/photos/motumboe/

 Qualcuno ha una soluzione elegante?
find .... -print0 | xargs -0 ...
e il grep puoi eliminarlo facendo il test con ! -name '.*' direttamente dal 
find. Tieni presente che un nome di file puo' contenere \n, anche se e' 
raro.
(e sorvoliamo sul resto)

 
]zac[
Credo che ti convenga scrivere qualche riga di script e utilizzare
l'opzione -exec di find.
Probabilmente passando {} a ' ls --full-time ' (il comando, non l'opzione di
find) e poi utilizzando cut per avere come prima colonna la data e ora è
meno difficile ottenere il risultato voluto (si dovrebbe eliminare l'uso di
xargs, awk, e forse di grep).

 
dimmi dimmi!
-- 
http://www.flickr.com/photos/motumboe/

 ..i file nascosti sono ancora lì però...
Non mi pare di vedere file che iniziano con "." nel tuo output. Se poi 
invece vuoi escludere qualunque cosa abbia un componente del path che inizia 
con "." (che e' una cosa diversa), allora devi fare una cosa del genere:
find /basedir \( -name '.*' ! -name '.' -prune \) -o -type f -print
Tornando al tuo comando originario, si potrebbe riscrivere cosi':
find / \( -path /sys -o -path /proc \) -prune -o \( -name '.*' ! -name '.' -
prune \) -o -type f -mmin -60 -printf '%T@ %p\n' | sort -r
poi da qui in poi dipende da cosa vuoi ottenere come output, e sempre 
assumendo che tu non abbia \n nei nomi dei file.


tutto perfetto! giusta l'osservazione sulle dir che cominciano con .
ho dato un'aggiustatina all'output secondo i miei gusti, posso dire di 
essere soddisfatto!
Grazie mille
marco@marco-desktop:~$ find / \( -path /sys -o -path /proc \) -prune -o
\( -name '.*' ! -name '.' -prune \) -o-type f -mmin -60 -printf '%T@
%TY-%Tm-%Td %TH:%TM %p\n' 2> /dev/null | sort -r |awk '{$1=""; print
}'
  2009-09-03 09:27 /var/tmp/kdecache-marco/kpc/kde-icon-cache.updated
  2009-09-03 09:26 /var/tmp/kdecache-marco/kpc/plasma_theme_default.index
  2009-09-03 09:26 /var/tmp/kdecache-marco/kpc/kde-icon-cache.index
  2009-09-03 09:26 /var/log/cups/access_log
  2009-09-03 09:23 /var/log/messages
  2009-09-03 09:20 /var/run/hald/acl-list
  2009-09-03 09:20 /var/run/ConsoleKit/database
  2009-09-03 09:20 /var/run/update-motd.lastrun
  2009-09-03 09:20 /var/run/motd
  2009-09-03 09:20 /var/run/update-motd/99-reboot-required
  2009-09-03 09:20 /var/run/update-motd/90-updates-available
  2009-09-03 09:20 /var/log/ConsoleKit/history
  2009-09-03 09:20 /var/log/auth.log
  2009-09-03 09:20 /var/log/syslog
  2009-09-03 09:16 /home/marco/t t t t.tpu
  2009-09-03 09:15 /home/marco/test.py
  2009-09-03 09:15 /home/marco/test.py~
  2009-09-03 09:14 /var/log/daemon.log

> '.' -prune \) -o -type f -mmin -60 -printf '%T@ %p\n' | sort -r
Giusto per precisare, il "! -name '.'" serve solo se hai specificato come 
path di base per find ".", altrimenti si puo' eliminare e il comando diventa
find / \( -path /sys -o -path /proc \) -prune -o -name '.*' -prune -o -type 


 
esattamente! grazie
-- 
http://www.flickr.com/photos/motumboe/