Newsgroup: it.comp.os.linux.software
Titolo: Trovare file non convertiti

Salve,
ieri sera ho lanciato un processo di conversione tramite find e unoconv 
per convertire circa 4000 file in RTF in formato ODT.
Stamattina, tramite find e wc, ho scoperto che una decina di questi file 
non sono stati convertiti.
Siccome sono tanti e sono sparsi in 3-4 livelli di sottodirectory, mi 
viene male pensare di cercare a mano quelli non convertiti, ma non riesco 
a pensare a un modo (che non sia scrivere un software apposta, anche se di 
poche righe) per trovarli.
I file hanno lo stesso nome, tranne per l'estensione che e` appunto .rtf 
per gli originali e .odt per i convertiti.
Mi sapete suggerire qualcosa?
Grazie.

 Mi sapete suggerire qualcosa?
lancia due find uno che cerchi gli rtf e l'altro che cerchi gli odt
tagliando l'estensione, reindirizzi l'output su due file e ne fai un bel
diff. Dovresti risolvere con poche righe di bash.
-- 
Massimo Bacilieri AKA Crononauta

 Grazie.
-- 
Ciao!
Andrew McBlues
msn: mcblues78 at 
people.it



E` proprio togliere l'estensione il problema... :)
Ho provato con 
find . -name "*.rtf" -exec echo `basename {} .rtf` \;
Ma me la ignora, mi stampa comunque il nome del file completo. E anche se 
funzionasse, mi toglierebbe anche il path e sarei nella rogna a ritrovare 
il file.
Vabbe, ho risolto con un search&replace da joe... :)
Grazie a entrambi per i suggerimenti.
Bye.

 find . -name "*.rtf" -exec echo `basename {} .rtf` \;
argh...
find . -name "*.rtf" | awk '{ print ($0,1,length-4);}'
:-)


 find . -name "*.rtf" | awk '{ print ($0,1,length-4);}'
Eh, c'hai ragggione anche tu, ma sed, awk, tr e perl non li ho mai 
digeriti :)
Prima o poi dovro` farmi una full immersion.
Bye.

 digeriti :)
Beh se ti consola, io in ormai 10 anni da "pinguino", non ci ho ancora
capito una fava in find... :-D


 find . -name "*.rtf" | awk '{ print ($0,1,length-4);}'
 che mi aspettavo restituisse il basename dei file (tolti 4 caratteri
insomma). Ma:
echo circumflessi.html | awk '{print($0,1,length-4);}'
  mi restituisce:
circumflessi.html 1 13
  mentre mi aspettavo 'circumflessi.' :-o
  E' normale o c'ho il computer che mi fa i dispetti? :-o
  Scusa se chiedo ma non ho proprio tempo di guglare (un tentativo
veloce non mi ha dato risultati) e mi piacerebbe saperlo prima di
partire per il WE. :-)
  Un saluto e grazie.
PS: io da manovale avrei fatto qualcosa come:
echo circumflessi.html | rev | cut -f "2" -d "." | rev
  :-D
  Saluti di nuovo, :-)
-- 
Gianfranco Bertozzi
Linux User #183585

 echo circumflessi.html | rev | cut -f "2" -d "." | rev
Avresti preso un abbaglio per tutti i file della directory corrente,
perch� i percorsi cominciavano con ./percorso/al/file, e il tuo cut ti
dava tutto quanto dopo il primo punto.


 Mi sapete suggerire qualcosa?
fgrep -vf <(find $dirname -name '*.odt' | sed s/\.odt//)  \
          <(find $dirname -name '*.rtf')  

 il file.
Il modo corretto per fare quello che volevi fare è:
find . -name "*.rtf" -exec basename '{}' .rtf \;

mallin.shetland wrote:

il predicato di "-name" avrebbe dovuto essere '*.odf$'
Scusate l'errore.

 perché i percorsi cominciavano con ./percorso/al/file, e il tuo cut ti
  Ah, si, certo. Io parlavo del mio circumflessi. :-)
  Saluti e grazie. Domani posso partire tranquillo. ;-)




a parte il typo su odf che doveva essere odt
mi spieghi quel dollaro alla fine?
-name non accetta solo wildcard di globbing?

Redwiz wrote:

Scusate ma ieri c'erano trentasette gradi ed il mio cervello 
era liquefatto. Il risultato è stato che sono sbagliati sia 
il mio post che la correzione che ho proposto. 
Il codice corretto è:
fgrep -vf <(find $dirname -name '*.odt' -exec sed s/\.odt$// '{}' \+)  \
           <(find $dirname -name '*.rtf')
Ovviamente funziona anche:
fgrep -vf <(find $dirname -name '*.odt' | sed s/\.odt$//)  \
           <(find $dirname -name '*.rtf')
Credo sia chiaro, il '$' andava nel sed e non nel find. Il motivo è 

Redwiz wrote:

Scusate ma ieri c'erano trentasette gradi ed il mio cervello 
era liquefatto. Il risultato è stato che sono sbagliati sia 
il mio post che la correzione che ho proposto. 
Il codice corretto è:
fgrep -vf <(find $dirname -name '*.odt' -exec sed s/\.odt$// '{}' \+)  \
           <(find $dirname -name '*.rtf')
Ovviamente funziona anche:
fgrep -vf <(find $dirname -name '*.odt' | sed s/\.odt$//)  \
           <(find $dirname -name '*.rtf')
Credo sia chiaro, il '$' andava nel sed (non nel find) per
evitare noiosi e sottili bachi nel processare file dai nomi
strani come "vacanze.pasqua.odtaranto.odt" e simili.

 strani come "vacanze.pasqua.odtaranto.odt" e simili.
certo, era giusto per chiarire, visto che di solito c'� da imparare da
quello scrivi (con le tue maniere :)).

            <(find $dirname -name '*.rtf')
Ovviamente questo codice non funziona :-(

            <(find $dirname -name '*.rtf')
Questo invece (dovrebbe) funziona(re).

 digeriti :)
sed e perl non sono così terribili, per lo meno per le cose semplici.
awk in effetti lo trovo ostico anch'io, almeno la sua documentazione.
Chissà se c'è un AWK for DUMMIES? :-)