Pagina 1 di 2

[RISOLTO] Copiare file da più sottocartelle

Inviato: martedì 17 aprile 2012, 12:39
da nzechck85
Ciao a tutti Ragazzi!!
Ho un piccolo e banale problema che non riesco a risolvere. Successivamente a un recupero di dati da hard disk, il software che ho utilizzato mi ha creato la bellezza di 339 cartelle nella cartella home. Il mio intento è quello di copiare tutti i file contenuti in queste 339 cartelle e spostarli in un unica cartella. i file nelle cartelle sono tutti mp3 quindi filtrare la ricerca con l'estensione dei file.
Vi ringrazio anticipaamente per la pazienza e disponibilità

Re: Copiare file da più sottocartelle

Inviato: martedì 17 aprile 2012, 13:34
da ispaniko7
Per copiare una directory in un altra devi dare da terminale:

Codice: Seleziona tutto

cp -r directory_da_copiare /directory_finale

Re: Copiare file da più sottocartelle

Inviato: martedì 17 aprile 2012, 13:37
da l3on4rdo
nzechck85 ha scritto: [...]
Successivamente a un recupero di dati da hard disk, il software che ho utilizzato mi ha creato la bellezza di 339 cartelle nella cartella home. Il mio intento è quello di copiare tutti i file contenuti in queste 339 cartelle e spostarli in un unica cartella. i file nelle cartelle sono tutti mp3 quindi filtrare la ricerca con l'estensione dei file.
[...]
Queste directory hanno dei nomi particolari? Nel senso, hanno una radice comune e magari un numero finale che le distingue? O qualcosa sempre di questo genere?

In caso negativo, gli mp3 (per quanto riguarda la tua home e le sue sottodirectory) sono contenuti solo in quelle cartelle?
O ce ne sono altre che ne contengono (di mp3)?

Fammi sapere, ciao

Re: Copiare file da più sottocartelle

Inviato: martedì 17 aprile 2012, 15:24
da nzechck85
Ciao e grazie per le immeddiate risposte

inizialmente io avevo pensato a un find *.mp3 | cp *.mp3 /percorso cartella di destinazione
ma naturalmente mi và in errore: cp ha bisogno di un percorso sorgente

le cartelle si intitolano tutte recup_dir.(numero cartella)

Re: Copiare file da più sottocartelle

Inviato: martedì 17 aprile 2012, 15:38
da l3on4rdo
Creati l'unica directory in cui vuoi spostare il tutto.
Una volta creata la directory, dai il comando:

Codice: Seleziona tutto

find ~/recup_dir.* -type f -iname "*.mp3" -exec mv {} path_della_directory_in_cui_spostare_il_malloppo_di_file_mp3 \;
Fai attenzione (e in caso parliamone prima che si creino incidenti) al fatto che se ci sono, nelle differenti directory recup_dir, dei file con lo stesso nome, nello spostamento ti verranno sovrascritti e alla fine vedrai solo l'ultimo.
Inoltre credo che il comando non funziona se degli spazi nel nome dei file (cosa che a priori escluderei, visto che sono generati da un programma che penso sia "sensato").

Se si verifica uno dei precedenti casi, dillo che facciamo delle prove prima di procedere.
Altrimenti vai sereno con il comando
(magari prima, per precauzione copia il contenuto di quelle directory da un'altra parte, oppure usa il comando cp al posto di mv).

Ciao

ps:
nel comando che hai postato:

Codice: Seleziona tutto

find *.mp3 | cp *.mp3 /percorso cartella di destinazione
ci sono un paio di errori concettuali.
Vedi tu se hai voglia di parlarne.
Io sono a disposizione per eventuali chiarimenti in merito :)

Re: Copiare file da più sottocartelle

Inviato: mercoledì 18 aprile 2012, 13:52
da nzechck85
Digitando il comando consigliato da l3on4rdo, mi viene visualizzato il seguente errore:

Find: manca l'argomento per >

ho una soluzine diversa?

Grazie in anticipo

Re: Copiare file da più sottocartelle

Inviato: mercoledì 18 aprile 2012, 16:12
da l3on4rdo
Di soluzioni diverse ne esistono minimo due :)
Puoi postare l'output del comando:

Codice: Seleziona tutto

find --version
e anche il comando che hai dato e l'errore che ti ha prodotto (facendo proprio il copia incolla dal terminale :) )

Inoltre, per postare il codice, ricorda di usare i tag appositi.
Clicchi sul bottone con il carattere #, subito sopra le faccine.
Poi inserisci il testo tra i due tag che ti vengono visualizzati nel messaggio che stai scrivendo, in questo modo:
[nobbc]

Codice: Seleziona tutto

testo del codice
oppure
output di un comando
[/nobbc]
In questo modo il tuo messaggio risulta più facilmente comprensibile.

Saluti

Re: Copiare file da più sottocartelle

Inviato: venerdì 20 aprile 2012, 15:51
da nzechck85

Codice: Seleziona tutto

find --version
find (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Compilato usando GNU gnulib versione e5573b1bad88bfabcda181b9e0125fb0c52b7d3b
Funzionalità abilitate: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS() CBO(level=0)

Re: Copiare file da più sottocartelle

Inviato: venerdì 20 aprile 2012, 16:24
da l3on4rdo
Hai la mia stessa versione di find, quindi se stai usando una versione di Ubuntu non dovrebbero esserci problemi e il comando che ti ho suggerito dovrebbe funzionare.
Cerchiamo di capire perché non ti funziona.

Se dai il comando:

Codice: Seleziona tutto

find ~/recup_dir.* -type f -iname "*.mp3"
cosa ti risponde il terminale?
Nel senso, ti mostra i path dei file mp3?
Te li mostra correttamente?
Posta, in caso, un estratto dell'output.
(dico un estratto perché l'output del comando, se ne hai tanti, potrebbe essere molto lungo).

Ciao

Re: Copiare file da più sottocartelle

Inviato: sabato 21 aprile 2012, 17:38
da nzechck85
Il comando elenca tutti i file mp3 di tutte le cartelle,
il terminale risponde così:

Codice: Seleziona tutto

Recupero/recup_dir.3/f63555523.mp3
Recupero/recup_dir.3/f64370291.mp3
Recupero/recup_dir.3/f64309187.mp3
Recupero/recup_dir.3/f60295107.mp3
Ciao

Re: Copiare file da più sottocartelle

Inviato: martedì 24 aprile 2012, 1:11
da l3on4rdo
Se non ti funziona il precedente comando, prova a dare:

Codice: Seleziona tutto

find ~/recup_dir.* -type f -iname "*.mp3" | while read fileName ; do mv $fileName path_directory_di_destinazione; done
ps:
mi sembra comunque strano che non ti funzioni l'opzione -exec
Se questo comando ti risolve, rimarrebbero comunque due questioni aperte. Questa di exec e quella della spiegazione degli errori del comando che hai postato.

Re: Copiare file da più sottocartelle

Inviato: martedì 24 aprile 2012, 22:26
da nzechck85
Bèh!... GRANDIOSO!!
Il risultato è quello richiesto in principio, ma come dici tu ci sono delle cose da rivedere, come ad esempio il comando -exec che non funziona e il "mio" comando (pure)

Per ora non posso che ringraziarti infinitamente per la Pazienza e supporto offerto

P.S. avrei anche qualche quesito su samba :) ..... ma rimandiamo per ora

Grazie ancora
a presto!

Re: [RISOLTO] Copiare file da più sottocartelle

Inviato: mercoledì 25 aprile 2012, 3:53
da l3on4rdo
Per samba apri una nuova discussione nella sezione che ritieni più opportuna (al massimo la si sposta ).
Per il resto, mi sembra strano che exec non ti funzioni.
Prova a dare il comando:

Codice: Seleziona tutto

find ~/recup_dir.* -type f -iname "*.mp3" -exec echo mv {} path_della_directory_in_cui_spostare_il_malloppo_di_file_mp3 \;
Che ti dice?

ps:
che ti dice se dai:

Codice: Seleziona tutto

find path_directory_di_destinazione -type f -iname "*.mp3" | wc -l
?

Re: [RISOLTO] Copiare file da più sottocartelle

Inviato: mercoledì 25 aprile 2012, 11:31
da nzechck85
Ciao Leo
Di seguito gli output dei comandi

Codice: Seleziona tutto

 ~Recupero/recup_dir.* -type f -iname "*.mp3" -exec echo mv {} /home/nzechck/mp3/
find: manca l'argomento per «-exec»

Codice: Seleziona tutto

find /home/nzechck/mp3 -type f -iname ".mp3" | wc -l
0

Re: [RISOLTO] Copiare file da più sottocartelle

Inviato: mercoledì 25 aprile 2012, 20:24
da l3on4rdo
Il secondo comando l'ho completamente toppato :)

Codice: Seleziona tutto

find /home/nzechck/mp3 -type f -iname "*.mp3" | wc -l
anche il primo... è toppato...
Due su due... un'ottima media :D

Dai il comando:

Codice: Seleziona tutto

find path_directory_dove_hai_spostato_gli_mp3 -type f -iname "*.mp3" echo -exec mv {} path_della_directory_in_cui_spostare_il_malloppo_di_file_mp3 \;
Si dovrebbe capire come mai non ti funzionava l'exec, in questo modo (ovvero, sono test per iniziare a capire da cosa possa dipendere)
Comunque, alle brutte, mi sa che è meglio procedere creandosi una directory ad hoc, con il giusto contenuto e poi fare i test su di essa. Vediamo dopo questi output come procedere.

In merito al tuo comando:

Codice: Seleziona tutto

find *.mp3 | cp *.mp3 /percorso cartella di destinazione
ci sono un po' di errori ed incomprensioni.
Allora, il find in quel modo ti cerca nelle directory il cui nome è di questo tipo "qualsiasi-serie-di-caratteri".mp3
Non ti cerca, come penso tu volessi fare, tutti gli mp3.
Il primo parametro, come lo hai scritto tu, è la directory in cui fare la ricerca.
Inoltre la pipe è gestita malamente, nel senso che tu redirezioni (con la pipe) l'output del comando a sinistra della pipe verso il comando a destra della pipe.
Di nuovo, anche se come errore si vede spesso, l'output va letto e gestito.
In quel modo (con il cd *.mp3) inoltre, non associ i risultati del primo comando al secondo. Restano scorrelati e in pratica bash non capisce cosa gli stai chiedendo.
(questo perché avevi chiesto lumi sul tuo comando :) )

Ciao

Re: [RISOLTO] Copiare file da più sottocartelle

Inviato: sabato 28 aprile 2012, 16:11
da nzechck85
Ciao Leo
Come và? di seguito ti posto l'ultimo comando

Codice: Seleziona tutto

find /home/nzechck/mp3 -type f -iname "*.mp3" echo -exec mv {} /home/nzechck/nuovamp3
find: i percorsi devono precedere le espressioni: echo
Uso: find [-H] [-L] [-P] [-Olivello] [-D help|tree|search|stat|rates|opt|exec] [percorso...] [espressione]
questo è l'altro

Codice: Seleziona tutto

find /home/nzechck/mp3 -type f -iname "*.mp3" | wc -l
1343
Grazie ancora

Re: [RISOLTO] Copiare file da più sottocartelle

Inviato: sabato 28 aprile 2012, 16:24
da Laycastle
nzechck85 ha scritto:Ciao Leo
Di seguito gli output dei comandi

Codice: Seleziona tutto

 ~Recupero/recup_dir.* -type f -iname "*.mp3" -exec echo mv {} /home/nzechck/mp3/
find: manca l'argomento per «-exec»
Manca il \; finale.
nzechck85 ha scritto:Ciao Leo
Come và? di seguito ti posto l'ultimo comando

Codice: Seleziona tutto

find /home/nzechck/mp3 -type f -iname "*.mp3" echo -exec mv {} /home/nzechck/nuovamp3
find: i percorsi devono precedere le espressioni: echo
Uso: find [-H] [-L] [-P] [-Olivello] [-D help|tree|search|stat|rates|opt|exec] [percorso...] [espressione]
Credo intendesse

Codice: Seleziona tutto

find /home/nzechck/mp3 -type f -iname "*.mp3" -exec echo mv {} /home/nzechck/nuovamp3 \;
Ciao. :D

Re: [RISOLTO] Copiare file da più sottocartelle

Inviato: sabato 28 aprile 2012, 16:26
da l3on4rdo
Come ha notato Laycastle, nei comandi che dai non hai copiato anche il finale ;\
Anche da un tuo post precedente si vedeva, ma non me ne ero accorto.
Ulteriori test sono inutili, perché exec ti viene riconosciuto, se dai il comando completo :)

Ciao

Re: [RISOLTO] Copiare file da più sottocartelle

Inviato: sabato 28 aprile 2012, 16:45
da nzechck85
Ah! Cacchio

Però anche così facendo il terminale si blocca in questa situazione:

Codice: Seleziona tutto

find /home/nzechck/mp3 -type f -iname "*.mp3" echo -exec mv {} /home/nzechck/nuovamp3\
> 


Si aspetta qualcolsaltro? è normale?

Grazie ancora

Re: [RISOLTO] Copiare file da più sottocartelle

Inviato: sabato 28 aprile 2012, 17:02
da l3on4rdo
Il comando corretto è:

Codice: Seleziona tutto

find /home/nzechck/mp3 -type f -iname "*.mp3" -exec echo mv {} /home/nzechck/nuovamp3\ \;
Come ti ha fatto notare Laycastle (errore mio) avevo invertito per sbaglio exec ed echo. Vanno bene come scritti qui sopra (non edito i precedenti messaggi, altrimenti non si capisce il senso della discussione :) )
Anche in questo caso, stai attento al backslash e il punto e virgola finali.

Ciao