Come copiare solo determinati file?

Installazione, configurazione e uso di programmi e strumenti.
Scrivi risposta
ciacnorris
Prode Principiante
Messaggi: 15
Iscrizione: domenica 20 dicembre 2009, 15:41
Desktop: KDE
Distribuzione: KXStudio 12.04.3

Come copiare solo determinati file?

Messaggio da ciacnorris »

La mia macchina fotografica, a ogni scatto, crea un file .jpg e uno .nef, che è la versione raw. Per ogni foto quindi esistono due file con lo stesso nome ma diversa estensione.
Diciamo che prendo tutti i file dalla sd, e li copio nella cartella A.
Poi copio solo i .jpg nella cartella B, e me li faccio passare cancellando le foto che non mi piacciono.
A questo punto vorrei lavorare sui raw delle fotografie che ho selezionato, copiando dalla cartella A a una nuova cartella C solo i file .nef che, estensione a parte, hanno lo stesso nome dei file .jpg presenti nella cartella B.

Tralasciando l'opinabilità del mio workflow fotografico (dovuto a motivi che vi risparmio), immagino che questa cosa sia fattibile con la linea di comando. Qualcuno sa dirmi come? :)
Avatar utente
dunamis
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 578
Iscrizione: mercoledì 30 luglio 2008, 13:39
Desktop: UBUNTU
Distribuzione: Ubuntu Studio 22.04 LTS
Sesso: Maschile

Re: Come copiare solo determinati file?

Messaggio da dunamis »

Si è possibile da linea di comando. Tuttavia è possibile anche dal gestore Files di Unity/Gnome cliccando sulla "lente di ingrandimento" (Cerca...) e scrivendo .nef. Appariranno solo i files .nef che selezionerai e copierai nella cartella C.

Immagine
GNU/Linux? Una storia d'amore che parte dal 2003 (Mandrake, Debian, Ubuntu, Kubuntu, Chakra Linux, Manjaro Linux e altro...)
La mia attuale Workstation? Notebook Omen HP Laptop con SO: Microsoft Windows 11 / Ubuntu Studio 22.04 LTS.
http://wiki.ubuntu-it.org/JoshuaDunamis
ciacnorris
Prode Principiante
Messaggi: 15
Iscrizione: domenica 20 dicembre 2009, 15:41
Desktop: KDE
Distribuzione: KXStudio 12.04.3

Re: Come copiare solo determinati file?

Messaggio da ciacnorris »

Forse non mi sono spiegato: vorrei che, senza doverli selezionare io manualmente, si copiassero da A a C solo i file .nef per cui esiste un file con lo stesso nome (ma con estensione .jpg) nella cartella B.
Avatar utente
steff
Moderatore Globale
Moderatore Globale
Messaggi: 40301
Iscrizione: domenica 18 febbraio 2007, 19:48
Desktop: LXQt+labwc
Distribuzione: Arch; Debian; Ubuntu Server
Sesso: Maschile
Località: Toscana
Contatti:

Re: Come copiare solo determinati file?

Messaggio da steff »

Tempo fa i nostri bravi esperti mi hanno messo su uno script qui, penso che sia adattabile per te. Sposta i file raw e jpg (ma non gli uso mai)dalla scheda in /foto/anno/mese e lancia darktable. Basta un splittare lka riga con find penso per *.nef e *.jpg, ma lascio a chi capisce di più. Basta che dici sono i percorsi tuoi per A e B http://forum.ubuntu-it.org/viewtopic.php?p=4468682

Codice: Seleziona tutto

#!/bin/bash
mese=`date +%B`
anno=`date +%Y`
if [ ! -d ~/foto/$anno/$mese ]; then
  mkdir -p ~/foto/$anno/$mese
fi
find /run/media/stef/PENTAX/ -type f \( -iname '*.jpg' -o -iname '*.PEF' \) -print0 | xargs -0 -I{} mv -v {} ~/foto/$anno/$mese
darktable ~/foto/$anno/$mese &
Hai fatto un backup oggi? Ieri?? Quando???
La Documentazione da consultare e la FAQ sul uso del forum
Sistemi: LXQt - semplice, modulare e configurabile + *ubuntu in Vbox
ciacnorris
Prode Principiante
Messaggi: 15
Iscrizione: domenica 20 dicembre 2009, 15:41
Desktop: KDE
Distribuzione: KXStudio 12.04.3

Re: Come copiare solo determinati file?

Messaggio da ciacnorris »

Sinceramente non saprei come adattarlo. :)
Avatar utente
steff
Moderatore Globale
Moderatore Globale
Messaggi: 40301
Iscrizione: domenica 18 febbraio 2007, 19:48
Desktop: LXQt+labwc
Distribuzione: Arch; Debian; Ubuntu Server
Sesso: Maschile
Località: Toscana
Contatti:

Re: Come copiare solo determinati file?

Messaggio da steff »

Basta che dici dove vuoi i due tipi di files e se li vuoi cancellare o no dalla scheda.
Hai fatto un backup oggi? Ieri?? Quando???
La Documentazione da consultare e la FAQ sul uso del forum
Sistemi: LXQt - semplice, modulare e configurabile + *ubuntu in Vbox
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2848
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Come copiare solo determinati file?

Messaggio da rai »

se dai qualche informazione ti possiamo aiutare ad abbozzare lo script
copia e incolla l'output di

Codice: Seleziona tutto

find /media -type d
e di

Codice: Seleziona tutto

which <nome_del_programma_che_usi_per_vedere/cancellare_i_jpeg>
scrivi anche i percorsi che nel tuo file system corrispondo alle cartelle A, B, C
Avatar utente
tomm
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 796
Iscrizione: lunedì 15 ottobre 2007, 10:16
Desktop: Gnome
Distribuzione: Ubuntu 16.04

Re: Come copiare solo determinati file?

Messaggio da tomm »

vorrei che, senza doverli selezionare io manualmente, si copiassero da A a C solo i file .nef per cui esiste un file con lo stesso nome (ma con estensione .jpg) nella cartella B.
ipotizzando che ti trovi con il terminale in una cartella che contiene le sottocartelle A, B e C, che contengono i file *.jpg e *.nef come hai spiegato tu, dovrebbe bastare questo comando:

Codice: Seleziona tutto

find ./B -type f -print0 | while read -d $'\0' file;do cp "A/$(basename -s ".jpg" "$file" ).nef" C/;done
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2848
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Come copiare solo determinati file?

Messaggio da rai »

infatti io pensavo a una cosa del genere di quella postata da tomm preceduta dalla copia dei file dalla scheda SD all'HD:
find <PATH_SD> -type f \( -iname '*.jpg' -o -iname '*.nef' \) -print0 | xargs -0 -I{} mv -v {} <PATH_A>

e dalla cernita delle foto:
<PHOTO-TOOL>


invece il mio GNU basename 8.13 funzionerebbe in questo modo:
find ./B -type f -print0 | while read -d $'\0' file;do cp "A/$(basename "$file" jpg)nef" C/;done

Se poi ciacnorris è interessato, si può automatizzare anche l'esecuzione dello script all'inserimento della scheda SD nel lettore
ciacnorris
Prode Principiante
Messaggi: 15
Iscrizione: domenica 20 dicembre 2009, 15:41
Desktop: KDE
Distribuzione: KXStudio 12.04.3

Re: Come copiare solo determinati file?

Messaggio da ciacnorris »

rai [url=http://forum.ubuntu-it.org/viewtopic.php?p=4563423#p4563423][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:se dai qualche informazione ti possiamo aiutare ad abbozzare lo script
copia e incolla l'output di

Codice: Seleziona tutto

find /media -type d
e di

Codice: Seleziona tutto

which <nome_del_programma_che_usi_per_vedere/cancellare_i_jpeg>
scrivi anche i percorsi che nel tuo file system corrispondo alle cartelle A, B, C
Con find /media -type d mi esce un elenco infinito di cartelle che sinceramente eviterei di copincollare per motivi di privacy. :)
Per vedere e cancellare i jpeg uso Gwenview, quindi
/usr/bin/gwenview

B e C sono nella stessa cartella, A è /media/user/NIKON D5100/DCIM/100D5100/

Intanto grazie a tutti... se poi qualcuno fosse anche così gentile da spiegarmi come funzionano le linee di comando da voi pensate, in modo da non doverle imparare proprio a memoria, sarebbe il top. ^_^
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2848
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Come copiare solo determinati file?

Messaggio da rai »

ciacnorris ha scritto:Diciamo che prendo tutti i file dalla sd, e li copio nella cartella A.
Poi copio solo i .jpg nella cartella B, e me li faccio passare cancellando le foto che non mi piacciono.
A questo punto vorrei lavorare sui raw delle fotografie che ho selezionato, copiando dalla cartella A a una nuova cartella C solo i file .nef che, estensione a parte, hanno lo stesso nome dei file .jpg presenti nella cartella B.
ciacnorris ha scritto:A è /media/user/NIKON D5100/DCIM/100D5100/
ma quindi vuoi spostare le foto all'interno della stessa SD?
Siccome non sono sicuro di avere capito, lascio a te di personalizzare i percorsi: copia e incolla questo codice in un file e salvalo con un nome di tuo gusto, diciamo ~/pippo

Codice: Seleziona tutto

#!/bin/bash

# PERSONALIZZA QUESTI PERCORSI
# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
PathSD="percorso della cartella dove la macchina salva le foto"
PathA="/media/user/NIKON D5100/DCIM/100D5100/"
PathB="percorso della cartella B"
PathC="percorso della cartella C"
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

[[ -d $PathA && -d PathB && -d PathC ]] || mkdir -p PathA PathB PathC
find "$PathSD" -type f \( -iname '*.jpg' -o -iname '*.nef' \) -print0 | xargs -0 -I {} cp {} "$PathA"
find "$PathSD" -type f  -iname '*.jpg'  -print0 | xargs -0 -I {} cp {} "$PathB"

/usr/bin/gwenview  # chiudi il programma se hai già fatto la selezione delle foto

find "$PathB" -type f -print0 | while read -d $'\0' file; do
cp "$PathA/$(basename "$file" jpg)nef" "$PathC"
done
esegui

Codice: Seleziona tutto

chmod u+x ~/pippo
ora, con la card SD inserita, eseguendo

Codice: Seleziona tutto

~/pippo
puoi verificare se succedono le cose che hai chiesto
ciacnorris
Prode Principiante
Messaggi: 15
Iscrizione: domenica 20 dicembre 2009, 15:41
Desktop: KDE
Distribuzione: KXStudio 12.04.3

Re: Come copiare solo determinati file?

Messaggio da ciacnorris »

Hai ragione, ho sbagliato e il percorso di A sarebbe un altro.

Mi sembra di capire che il tuo script segua tutto il mio workflow, ma a me basta capire come copiare da A a C i file .NEF che hanno lo stesso nome (salvo l'estensione) dei file .JPG che ho nella cartella B. È quello che fanno le ultime due righe?

Me le potresti spiegare, o darmi i riferimenti per documentarmi, in modo da capire come farlo da solo? :)
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2848
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Come copiare solo determinati file?

Messaggio da rai »

questo è lo script con la spiegazione di quello che fanno le righe

Codice: Seleziona tutto

#!/bin/bash

# PERSONALIZZA QUESTI PERCORSI
# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
PathSD="percorso della cartella dove la macchina salva le foto"
PathA="percorso della cartella A"
PathB="percorso della cartella B"
PathC="percorso della cartella C"
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

# ------------------------------------------------------------------------------------------------------ #
# verifica che tutte le cartelle esistano, se non è così le crea
[[ -d $PathA && -d PathB && -d PathC ]] || mkdir -p $PathA $PathB $PathC


# copia tutte le immagini dalla SD alla cartella A
find "$PathSD" -type f \( -iname '*.jpg' -o -iname '*.nef' \) -print0 | xargs -0 -I {} cp {} "$PathA"


# copia i file.jpg dalla SD alla cartella B
find "$PathSD" -type f  -iname '*.jpg'  -print0 | xargs -0 -I {} cp {} "$PathB"


/usr/bin/gwenview  # chiudi il programma quando hai fatto la selezione delle foto
# ------------------------------------------------------------------------------------------------------ #

# cerca i file.jpg rimasti nella cartella B
find "$PathB" -type f -print0 | while read -d $'\0' file; do

# copia da 'A' a 'C' i file.nef che hanno lo stesso nome di quei file
cp "$PathA/$(basename "$file" jpg)nef" "$PathC"
done
come vedi, se non ti interessa automatizzare le altre operazioni, puoi eliminare la parte di script delimitata; ricorda comunque di personalizzare i percorsi

per imparare l'uso dei comandi bisogna/basta cominciare ad usarli, le istruzioni sono nel manuale di ogni comando e le vedi nel terminale con

Codice: Seleziona tutto

man <comando>
Scrivi risposta

Ritorna a “Applicazioni”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 30 ospiti