Newsgroup: it.comp.os.linux.sys
Titolo: Spostare file con estensione in cartella

Salve a tutti,
sono nuovo su linux, in particolare ho ubuntu.
Mi servirebbe un aiuto per una conversione di file .dat in .asc. Io ho
un file .tcl che mi permette di fare questa conversione, ma funziona
file per file, nel senso che gli devo specificare il nome del file
sorgente è il nome del file destinazione:
./ta.tcl nome_sorgente.dat > nome_destinazione.asc
Vorrei creare uno script che mi consenta di farlo in modo automatico
scrivendo solo la cartella principale, senza entrare nelle singole
sottocartelle, dando al .asc il nome del file origine e salvandolo
nella stessa cartella o in una cartella che ha lo stesso nome (ma
ovviamente da un'altra parte) di dove era posizionato il file origine
(soluzione migliore e sperata).
Mi cerco di spiegare meglio. Io ho una cartella principale con dentro
17 sottocartelle ognuna contenente circa 64 file .dat. Ora io dovrei
prendere tutti questi file di ogni sottocartella e convertirli
manualmente con quella procedura, fino a che non impazzisco. Come
posso fare automaticamente ciò?
E' fattibile una cosa dle genere?
In alternativa, vorrei sapere se c'è un modo per spostare tutti i file
con una certa estensione (in particolare .dat), contenuti dentro una
cartella e nelle sottocartelle, in un'altra cartella creata da me.
Vi ringrazio per l'aiuto.

 cartella e nelle sottocartelle, in un'altra cartella creata da me.
Le cartelle sono quelle di sQuola. Sui filesystem ci sono le directory.
find srcdir -type f -name \*.ext | while read file; do \
mv "$file" dstdir ; done
man bash
http://tldp.org/LDP/abs/html/
-- 
Flavio Visentin
Scientists have finally discovered what's wrong with the female brain:
On the left side, there is nothing right, and on the right side, there
is nothing left.

 dstdir ; done
-exec ti sta antipatico? :-p


Questo fallirebbe perché penso che le sottodirectory vadano prima
create
In definitiva il tuo problema principale credo si possa risolvere così
SRCDIR=..
DSTDIR=..
find $SRCDIR -type f -name \*.dat | while read file; do
DIR=$DSTDIR`dirname $file`;
if [ ! -f "$DIR" ]; then mkdir -p $DIR fi;
./ta.tcl $file > $DIR/`basename $file`
done
.. credo eh ..
Ciauz
Gg

 create
SShh.. ritiro quello che ho detto ; )


questo comando mi serve per il secondo punto, giusto? solo per
spostare tutto in una cartella giusto? In pratica mi cerca in tutte le
cartelle e sotto cartelle i file .ext? la cartella di destinazione è
dstdir?
Il -exec come funziona?

 Il -exec come funziona?
$ ls -a testdir
.  ..  a  b  c.ext  d.ext  e.ext
$ ls -a testdir2
.  ..
$ find testdir -name "*.ext"
testdir/a/a.ext
testdir/b/b.ext
testdir/c.ext
testdir/d.ext
testdir/e.ext
$ find testdir -name "*.ext" -exec mv "{}" testdir2 \;
$ ls -a testdir2
.  ..  a.ext  b.ext  c.ext  d.ext  e.ext
$ ls -a testdir
.  ..  a  b


Ok, ma questo lo posso fare spostando i file manualmente, a me
servirebbe un qualcosa che mi cerca in tutte le 17 sottocartelle i
file .dat e me li copia, no sposta, in una cartella unica. Oppure va
bene se ci sono le sottocartelle? Purtroppo non posso sperimentare
subito.
CMQ la cosa principale sarebbe rispondere alla prima domanda che è
quella che mi preme di +, cioè utilizzare il ./ta.tcl.

 Il -exec come funziona?
man find



Sì, lo odio. Una volta lo usavo, ma poi ho fatto un errore tentando di fare
un comando un po' complesso rimuovendo mezzo fa. Sa allora mi sono
ripromesso di non usarlo più e di preferire il passaggio da while read che
non è così efficiente ma è IMHO più chiaro :)


 non è così efficiente ma è IMHO più chiaro :)
per non parlare del fatto che se  il comando esegue redirezioni et
similia non funziona + una ceppa


Cosa sono le cartelle sQuola? che c'entrano i videogiochi?
Quindi per spostare i file tu mi consigli:
find srcdir -type f -name \*.dat | while read file; do \
mv "$file" dstdir ; done
eseguendolo dalla cartella padre e mettendo al posto di dstdir, ad
esempio, \home\massi\nuovacartella ?
Ma per copiarli e basta senza muoverli al posto di mv che devo
utilizzare?
Grazie in anticipo a tutti quelli che mi stanno aiutando.

 Grazie in anticipo a tutti quelli che mi stanno aiutando.
Ritengo che ti manchino troppe basi per "giocare" senza rischi. Prima
leggiti la documentazione indicata e prova su un PC non in produzione e poi
eventualmente trasponi l'esperienza fatta sulla produzione. In questo
momento vedo un'elevata possibilità di fare danni.


 
Io lo uso solo per cose che non scrivono o cancellano.
-- 
"Benvenuto nel mondo vero."
Roy Batty

 informatica libera di Daniele Giacomini (
http://a2.pluto.it/
)
E così ce lo siamo tolti dai piedi per qualche mese. ;-)
-- 
           |Save our planet!
    Ciao   |Save wildlife!
   roberto |For your E-MAIL use ONLY recycled Bytes  !!
           |roberto poggi   
rpo...@softhome.net

 ...
ALT!
Prima di tutto l'uso di tale costrutto deve limitarsi a 
casi eccezionali.
Come seconda cosa, se devi usarlo scrivilo bene:
find srcdir -depth -type f -name '*.ext' -print0 |
  while read -rd '' f
    do
      echo mv -f -t dstdir "$f" 
    done
con l'avvertenza che questo richiede il find della GNU e
non risulta molto portabile. In tal caso :
find srcdir -depth -type f -name '*.ext' -print0 |
  while IFS='
' read -r f
    do
      mv -f -t dstdir "$f" 
    done
Con tutti i suoi limiti. 
Terza cosa, una precisazione, Questi cicli while spostano i 
file nella directory ``dstdir'' non duplicano l'albero delle 
directory. 
PS Questo lo ho scritto ieri sera, prima che mi venisse un 
colpo di sonno.
Infine una polemica.
La "Advanced Bash Scripting Guide" è una guida avanzata che
insegna tecniche complesse da esperti. Non è assolutamente 
adatta ai principianti. Tra l'altro la qualità di questa 
guida è discutibile. Fa spesso uso dell'infame  costrutto 
`ls ...` che serve solo in casi molto particolari, che anche 
in tali casi la sua utilità è discutibile e che ha molti 
difetti.
Inoltre la ABS non mostra esempi reali ma solo dimostrazioni 
di un concetto e per questo è ancor di più pericolosa ; il 
principiante è indotto a pensare che esempi costruiti e 
molto smplicistici di tecniche molto avanzate di cui non 
capiscono niente (es il costrutto  `ls ...`) siano casi reali 
da imitare e non esemèi da modificare con intelligenza.


 ventina di anni fa.
Se proprio vuoi tradurre "directory" la traduzione corretta 
è "indice".
Ed ora puoi anche capire perchè si lascia non tradotta.

mallin.shetland ha scritto:

Oh, non dirlo a me, google mi è testimone che odio le cartelle.


 Con tutti i suoi limiti.
Ah beh, questo si' che invece e' portabile! Su wikipedia alla
voce "portabilita'" c'e' proprio il codice che hai scritto sopra come
esempio!
(e sorvoliamo sul resto...)