Di solito, ti consigliamo di aprire Shotwell e trascinare nella cartella.
Se necessario, è possibile fare in modo che la shell crei un elenco di file CR2 e dire a Shotwell di aprire solo quei file. Occasionalmente può essere quello che vuoi, ma in questo caso non ha fatto esattamente ciò di cui avevi bisogno a causa del comportamento di Shotwell - in alcune altre circostanze, una caratteristica - di mostrarti automaticamente altri file di immagini (di tutti i tipi) che risiedono nel stesse cartelle delle immagini che hai aperto.
Per essere sicuro che Shotwell sappia solo delle immagini che ti interessano, puoi clonare l'albero delle directory da qualche altra parte, copiando solo i .cr2
file e le cartelle che li contengono, ma nient'altro. Tuttavia, ciò potrebbe richiedere un notevole spazio aggiuntivo. Quindi un altro approccio è quello di costruire una gerarchia di collegamenti simbolici - dove invece di avere un nuovo albero di directory di copie dei tuoi .cr2
file originali , hai un nuovo albero di directory di simpatizzanti . Questo occupa molto meno spazio.
Questa risposta copre tutti quegli approcci.
Apertura di una cartella di immagini (comprese le sottocartelle) in Shotwell
Shotwell stesso offre due modi per aprire un intero albero di directory di foto. Se questi funzioneranno per te, non dovrai fare nulla di intelligente nella riga di comando o persino usarlo. Altrimenti, potresti finire per farlo in connessione con un'altra tecnica. (Ad esempio, se si finisce per creare una nuova directory di collegamenti simbolici o copie dei .cr2
file, è possibile utilizzare uno di questi modi per aprirlo.)
Modo 1: basta aprire l'intera cartella in Shotwell.
In Shotwell, nel menu File , fai clic su Importa da cartella . Quindi selezionare la cartella da cui si desidera importare le immagini. Questo non si limiterà ai .cr2
file, ma se stai aprendo file da più sottocartelle contenenti .cr2
immagini create da una fotocamera digitale, molto probabilmente questi saranno gli unici file presenti.
Vedere la risposta di Jakob a Mostra tutte le immagini in modo ricorsivo (includere eventuali sottocartelle) per ulteriori informazioni.
Modo 2: trascina la cartella in Shotwell.
Con la maggior parte degli ambienti desktop e browser di file, è anche possibile aprire Shotwell e trascinare la cartella che contiene le immagini nella finestra di Shotwell. Come Importa da cartella , questo è un altro modo in cui Shotwell consiglia di aprire le foto.
Quando si trascina da una finestra del browser di file o del desktop in Shotwell, è possibile trascinare in una libreria specifica. O se non hai impostato più librerie, puoi semplicemente trascinare praticamente ovunque e funziona. (Non è nemmeno necessario trascinare nel riquadro sinistro.)
Questo metodo è molto conveniente ed è potente quanto selezionare manualmente la cartella (con File > Importa da cartella , come descritto sopra). Quando apri file o cartelle utilizzando uno di questi metodi , Shotwell ti dà la possibilità di aprire le foto senza copiarle nella sua libreria.
Per importare senza copiare, fai clic su Importa in posizione anziché su Copia foto .
Avvio di Shotwell con un elenco di nomi di file di immagini
Se per qualche motivo si desidera o è necessario farlo eseguendo un comando nel Terminale, è possibile eseguire il shotwell
comando e passargli il nome di ogni immagine come argomento. Globstar semplifica:
shopt -s globstar
shotwell **/*.cr2
Ciò apre i .cr2
file situati ovunque nella directory corrente. Si differenzia dall'esecuzione di Shotwell e dal trascinamento della cartella, in quanto Shotwell proverà solo a importare i file di cui gli si assegna il nome. Tuttavia, poiché Shotwell mostra spesso altri file di immagine dalle stesse cartelle dei file che gli hai detto di aprire, questo potrebbe non essere adeguato alle tue esigenze. (E ulteriori informazioni che hai dato sul tuo problema suggeriscono che non lo è . Vedi sotto per un'alternativa.)
Ciò non include file o sottocartelle i cui nomi iniziano con.
. Tuttavia, se hai file CR2 i cui nomi iniziano con un punto, probabilmente la maggior parte delle volte non vorrai aprirli in Shotwell. A meno che tu non abbia deliberatamente nominato i tuoi file o cartelle in questo modo, un dotfile con un'estensione di file di immagine o documento ha più probabilità di essere un file di metadati piuttosto che un'immagine o documento reale. Ad esempio, macOS spesso aggiunge tali file (ad es. ._kittens.cr2
Per un'immagine reale kittens.cr2
) quando si accede a supporti esterni (inclusi flash drive e fotocamere digitali).
Se vuoi trovare anche file i cui nomi iniziano con .
o che si trovano in cartelle i cui nomi iniziano con.
, abilita anche dotglob. Puoi farlo con shopt -s dotglob
o passando entrambi globstar
e dotglob
al shopt
builtin:
shopt -s globstar dotglob
Per impostazione predefinita, i globs fanno distinzione tra maiuscole e minuscole. Ma si potrebbe desiderare per abbinare i nomi dei file è case-sensitive , in modo da aprire i file che terminano in .cr2
, .Cr2
, .cR2
, e .CR2
. Per fare ciò, sia:
Abilita nocaseglob eseguendolo shopt -s
con nocaseglob
, da solo o con altre opzioni di shell. Ad esempio, per essere eseguito shotwell
su tutti i .cr2
file, cercando tra maiuscole e minuscole e includendo .
-file e file in .
-directory:
shopt -s globstar dotglob nocaseglob
shotwell **/*.cr2
In alternativa , utilizzare .[cC][rR]2
anziché .cr2
nel modello glob stesso. Ad esempio, questo compie lo stesso di cui sopra:
shopt -s globstar dotglob
shotwell **/*.[cC][rR]2
Si noti che la distinzione tra maiuscole e minuscole è completamente separata dalla corrispondenza dei .
file e delle cartelle. È possibile rimuovere dotglob
dagli esempi precedenti e possono comunque non distinguere tra maiuscole e minuscole.
Per specificare una directory anziché semplicemente utilizzare la directory corrente, inserire il suo nome e un /
prima del **/*.cr2
glob. Ad esempio, la sostituzione del shotwell
comando sopra con questo aprirà tutti i .cr2
file all'interno della Pictures
sottodirectory della home directory:
shotwell ~/Pictures/**/*.cr2
A differenza del primo comando che utilizza la directory corrente, indipendentemente da dove si esegue quel comando, verrà chiesto a Shotwell di aprire gli stessi file.
analisi
Se devi davvero usare il terminale per questo, allora immagino che possa far parte di qualcosa di più complesso. Se lo desideri, puoi testare tali comandi prima di eseguirli effettivamente sostituendoli shotwell
con printf '%s\n'
. Invece di passare i nomi dei file a Shotwell, li elenca uno per riga. Ad esempio, sulla mia macchina:
ek@Io:~$ printf '%s\n' ~/tmp/**/*.cr2
/home/ek/tmp/another image.cr2
/home/ek/tmp/image.cr2
/home/ek/tmp/some folder/image3.cr2
Disattivazione di Globstar e altre opzioni di shell
L'opzione shell globstar è stata abilitata per funzionare, ed è ciò che ha fatto il shopt -s globstar
comando (sopra). Se è già abilitato, non sono necessari più comandi. E devi solo impostare globstar una volta per istanza della shell.
Puoi disattivare globstar eseguendo:
shopt -u globstar
E puoi verificare se globstar è acceso o spento eseguendo:
shopt globstar
Se stai usando globstar in uno script, dovresti considerare di disattivarlo se potrebbe esserci del codice che segue nello stesso script che non è stato pensato pensando a globstar. Ad esempio, scrivere **
quando intendi di *
solito non è un problema quando globstar è disabilitato, ma con globstar attivata, può causare seri problemi facendo in modo che un comando influenzi molto più file di quanto si pensi.
Allo stesso modo, se hai usato dotglob o nocaseglob e vuoi anche disattivarli, puoi farlo con shopt -u dotglob
e shopt -u nocaseglob
, rispettivamente. Puoi anche passare più opzioni di shell shopt -u
per disinserirle contemporaneamente. Ad esempio, per disattivare globstar,
dotglob
e nocaseglob
:
shopt -u globstar dotglob nocaseglob
Rispetto a globstar, ci sono meno errori gravi che potresti fare perché hai dimenticato di aver lasciato dotglob o nocaseglob. Ma altre persone (incluse le persone che consulti su siti come Ask Ubuntu) di solito assumono che dotglob e nocaseglob siano disabilitati quando ti suggeriscono comandi da usare, a meno che tu non dica diversamente.
Per ulteriori informazioni su queste opzioni di shell relative a glob (e anche su globs in generale ), consultare il manuale di riferimento di bash . Sono tutti trattati principalmente in 4.3.2 The Shopt Builtin . Per globstar, vedere anche 3.5.8.1 Pattern Matching . Per dotglob, vedere anche 3.5.8 Espansione nome file .
Creazione di un nuovo albero di directory
Poiché nel tuo caso sembra che tu abbia davvero bisogno di Shotwell per mostrare solo i .cr2
file, hai non .cr2
file nelle stesse cartelle con i .cr2
file e la navigazione delle immagini in Shotwell offre automaticamente anche quei file , sembra che tu debba avere una cartella che non contiene altri file di immagine oltre ai .cr2
file che stai tentando di aprire.
Spostare i file, come hai suggerito , è un approccio, ma raccomando invece di copiarli o, meglio, di creare collegamenti simbolici ai file (vedi anche FOLDOC ), perché:
- Se si spostano i file su più dispositivi, è comunque necessario copiarli, quindi in tal caso lo spostamento non è più veloce.
- Se hai lo spazio, è spesso una buona idea tenere una cartella non modificata di tutto ciò che hai iniziato fino a quando non sei soddisfatto che ciò che hai fatto sia corretto in base alle tue esigenze. Ovviamente questo non è sempre applicabile o pratico. Ma nel tuo caso, questi file sono il risultato di un'operazione di recupero dei dati. Può essere utile tenere un registro facilmente leggibile di ciò che è stato recuperato e da dove.
- Se si sceglie di creare collegamenti simbolici, la quantità di spazio aggiuntivo consumato è estremamente ridotta . (Se il disco di destinazione è completamente pieno , tuttavia, sarà comunque necessario liberare spazio su di esso - o utilizzare un disco di destinazione diverso - per creare collegamenti simbolici.)
C'è anche un'altra decisione da prendere. Crei tutte le nuove voci (siano esse copie o collegamenti simbolici) nella stessa directory, appiattendo la gerarchia dei file? O crei directory nella destinazione corrispondenti a ciascuna delle directory nell'origine che contengono almeno un .cr2
file?
L'appiattimento della gerarchia dei file consente di visualizzare tutti i file contemporaneamente, facilmente. In particolare, è facile visualizzare contemporaneamente i nomi e le dimensioni dei file, nonché selezionare qualsiasi combinazione di file in un browser di file grafico.
Ma perde anche informazioni su quali cartelle si trovavano, il che può essere utile (anche se puoi tornare alla cartella originale e cercarle lì se non sposti i file).
Il problema più grande con l'appiattimento della gerarchia dei file, tuttavia, è cosa succede se si hanno due o più file con lo stesso nome in luoghi diversi . Se si appiattisce la gerarchia dei file, a seconda di come lo si fa, o tutti, tranne il primo, non verranno copiati (o collegati) e si otterrà un errore o un avviso, oppure tutti tranne l'ultima copia (o collegamento) essere sovrascritto .
Questo è un altro motivo per cui consiglio di copiare o creare collegamenti simbolici anziché spostare file. Se "correttamente" sposti più file nello stesso file, hai perso tutto tranne l'ultimo!
A causa degli svantaggi di appiattire tutto in una singola directory senza sottodirectory, gli approcci che prendo qui costruiscono un nuovo albero di directory a destinazione.
Modo 1: copia
Lo mostro prima perché è un po 'più semplice, ma suggerisco invece di creare collegamenti simbolici ("Way 2"), specialmente se l'unità di destinazione potrebbe non avere abbastanza spazio per contenere tutti i file. "Way 2", che è un po 'più complicato, è molto più dettagliato perché sembrano esserci meno risorse su come usare quella tecnica, è il modo in cui mi aspetto che la maggior parte delle persone in questa situazione preferisca, e le informazioni che si applicano ad entrambi i metodi - vengono forniti consigli di base sulla fuga di spazi nei percorsi - piuttosto che qui.
Quando è necessario copiare un albero di directory e è necessario personalizzare l'operazione di copia, in genere è necessario utilizzare rsync
invece di cp
. Questo è uno di quei casi.
Sostituendo src
con il percorso della directory di livello superiore contenente tutti i file CR2 e sostituendo dest
con il nome della directory che si desidera creare che conterrà una gerarchia di collegamenti simbolici ai file CR2, eseguire:
rsync -rl --prune-empty-dirs --include='*/' --include='*.cr2' --exclude='*' src/ dest
Non dimenticare il /
nome dopo la directory di origine, a meno che tu non voglia creare una directory di livello superiore aggiuntiva all'internodest
. Cioè, se ometti il trailing /
, allora rsync
creerai la directory di destinazione per te, dentro dest
. Ad esempio, supponiamo che src
sia un percorso relativo contenente no /
. Poi:
- Con
src/
nel tuo rsync
comando, ottieni un link simbolico dest/foo/bar.cr2
per il file src/foo/bar.cr2
.
- Con
src
nel tuo rsync
comando, ottieni un link simbolico per il file .dest/src/foo/bar.cr2
src/foo/bar.cr2
Dal momento che potrebbe essere fonte di confusione per la directory di livello superiore in cui verranno posizionati i collegamenti simbolici con lo stesso nome di quella della directory di livello superiore contenente i .cr2
file a cui rimandano i collegamenti simbolici, si consiglia di includere /
alla fine della destinazione nome della directory nel tuo rsync
comando. (E, per la directory di origine, assegnagli una directory vuota, che non esiste o che è altrimenti dedicata a questo scopo. Altrimenti, ingombra qualche altra cartella.)
Come è generalmente il caso quando si passa il nome di un file o una directory a un programma da riga di comando o uno script, se i percorsi di directory di destinazione o di origine contengono spazi vuoti (o caratteri trattate in modo speciale dalla shell, come \
, $
, '
, e varie altre punteggiatura), quindi dovrai citarle . Ho dettagliato come fare questo, per il caso più comune di spazi, in "Way 2" - i consigli sulla citazione in quella sezione si applicano anche qui. Tuttavia, se non sei sicuro di come citare il nome di una cartella, puoi fare in modo che Ubuntu lo faccia per te semplicemente trascinando la cartella nel Temrminal; il suo percorso completo verrà incollato con la citazione corretta .
Dopo aver copiato solo i .cr2
file e le cartelle che li contengono, è possibile aprire la cartella di destinazione in Shotwell. (Vedi "Apertura di una cartella di immagini (comprese le sottocartelle) in Shotwell" sopra.) Tuttavia, prima di eseguire rsync
, ti consiglio di decidere se vuoi saltare le voci che iniziano con .
e se vuoi includere le voci con suffissi case-variant. In tal caso, dovrai eseguire un rsync
comando leggermente diverso .
Personalizzazione del trattamento delle voci tratteggiate e della distinzione tra maiuscole e minuscole
È possibile che si desideri utilizzare un rsync
comando diverso per modificare se i file e le directory che iniziano con un punto vengono saltati e se si desidera o meno la distinzione tra maiuscole e minuscole nella corrispondenza del suffisso .cr2
.
Il comando precedente non includere le directory ei file i cui nomi iniziano con .
. Per escludere tali file e directory, mettere --exclude='.*/' --exclude='.*'
prima di tutti gli altri --include
s e --exclude
s. Cioè, utilizzare questo rsync
comando invece (con le sostituzioni appropriate per src
e dest
, ovviamente):
rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.cr2' --exclude='*' src/ dest
I rsync
comandi mostrati finora sono stati-sensitive e non copiare i file che terminano in .CR2
, .Cr2
o .cR2
piuttosto che .cr2
. Se desideri che tali file vengano copiati, dovrai tenerne conto utilizzando il --include
modello *.[cC][rR]2
al posto di *.cr2
.
Questo terzo comando non fa distinzione tra maiuscole e minuscole e (come il primo comando) non salta i file e le directory i cui nomi iniziano con .
:
rsync -rl --prune-empty-dirs --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest
Se segui l'approccio della copia dei file rsync
e non sei sicuro di quale di questi comandi desideri, ti suggerisco di usarlo se vuoi assicurarti di non perdere nulla. Tuttavia, è necessario essere consapevoli del fatto che i file dot possono contenere metadati e i file dot denominati come immagini potrebbero non essere realmente immagini. Vedi le discussioni sui dotfile nella sezione "Avvio di Shotwell con un elenco di nomi di file immagine" sopra, e sui dotfile e la distinzione tra maiuscole e minuscole nel "Modo 2" di seguito.
Questo quarto comando è case-insensitive e (come il secondo comando) fa i file e le directory di salto i cui nomi iniziano con .
:
rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest
Modo 2: creazione di collegamenti simbolici
Questo è quello che ti consiglio di fare, sebbene Way 1 vada bene se hai abbastanza spazio sull'unità di destinazione. Non è necessario leggere il Modo 1 per utilizzare questo.
Il metodo presentato qui crea un elenco di .cr2
file e scorre l'elenco, creando directory di destinazione secondo necessità e popolandole con collegamenti simbolici a ciascun .cr2
file.
Questo è abbastanza complicato che suggerisco di inserirlo in uno script piuttosto che digitarlo in modo interattivo. Puoi mettere lo script dove vuoi, ma per comodità, ti mostrerò come farlo con lo script posizionato direttamente nella tua cartella home.
Scrivi (o incolla) lo script.
Crea un file di testo make-symlinks
, nella cartella home. Non è necessaria l'estensione del file.
Puoi farlo con qualsiasi editor di testo, come Vim, Nano, Gedit o Leafpad. Tuttavia, non utilizzare un elaboratore di testi come LibreOffice Writer. (Puoi anche farlo eseguendo cat > ~/make-symlinks
, incollando il contenuto del file e premendo Ctrl+ Dsu una nuova riga, se lo desideri.)
Se si assegna un nome diverso allo script make-symlinks
, assicurarsi di utilizzare quel nome quando si eseguono comandi che utilizzano lo script in un secondo momento.
#!/bin/bash
shopt -s globstar dotglob nocaseglob
for f in **/*.cr2; do
mkdir -p "$1/$(dirname "$f")"
ln -s "$PWD/$f" "$1/$f"
done
Inseriscilo nel file e salva il file. Questo script utilizza globstar, una funzionalità di Bash spiegata sopra in "Avvio di Shotwell con un elenco di nomi di file di immagini" .
Puoi modificare il modo in cui gestisce le voci tratteggiate e la distinzione tra maiuscole e minuscole.
A seconda delle tue esigenze, potresti voler apportare alcune modifiche:
Se non si desidera includere .cr2
file i cui nomi iniziano con .
o che risiedono in directory i cui nomi iniziano con .
, rimuovere dotglob
dalla shopt
riga.
I file e le directory il cui nome inizia con .
vengono spesso utilizzati per i metadati (vedere la sezione "Avvio di Shotwell con un elenco di nomi di file immagine" sopra). D'altra parte, se vuoi assicurarti di avere tutto, o se c'è qualcosa di inspiegabilmente mancante che sei abbastanza sicuro che ci sia, allora dovresti continuare dotglob
.
Se si desidera includere solo i file che terminano in esattamente .cr2
, ma non varianti di casi ( .CR2
, .Cr2
, e .cR2
), quindi è necessario rimuovere nocaseglob
. Poiché la tua situazione comporta il recupero dei dati e Shotwell non ti mostrerà nessuno dei file che hai perso quando apri la directory dei collegamenti simbolici - questo è il punto di questo metodo, dopo tutto - probabilmente vorrai conservare nocaseglob
.
Renderlo eseguibile.
Esegui questo comando per contrassegnare il tuo script eseguibile:
chmod +x ~/make-symlinks
Eseguilo alla fonte e passa la destinazione come argomento.
Quindi passare alla directory di origine, ovvero alla cartella di livello superiore che contiene le immagini. Ad esempio, se si trovano nella Pictures
sottodirectory della home directory, eseguire:
cd ~/Pictures
Qui è dove eseguirai lo script. Passa la directory di destinazione allo script come argomento della riga di comando.
Ad esempio, se si desidera cr2s
creare una directory chiamata da creare sul desktop per contenere i collegamenti simbolici, eseguire:
~/make-symlinks ~/Desktop/cr2s
O se vuoi semplicemente quella directory direttamente nella tua cartella home:
~/make-symlinks ~/cr2s
Oppure se hai un'unità montata su /media/you/MyDrive
e vuoi creare una cartella chiamata links
per contenere i collegamenti simbolici:
~/make-symlinks /media/you/MyDrive/links
Ma se l'unità è /media/you/My Drive
(con uno spazio), è necessario utilizzare la citazione. Una di queste opere (usane solo una, non eseguirle tutte):
~/make-symlinks '/media/you/My Drive/links'
~/make-symlinks /media/you/'My Drive'/links
~/make-symlinks /media/you/My\ Drive/links
Ma se usi ~
per la tua home directory, non citare che:
~/make-symlinks ~/'Two Words' # good
~/make-symlinks ~/Two\ Words # good
~/make-symlinks '~/Two Words' # BAD, because ~ doesn't get expanded
make-symlinks
crea la directory di destinazione per te se non esiste già, così come crea sottodirectory al suo interno. Tuttavia, funziona ancora se la destinazione esiste già.
Puoi anche eseguirlo più volte e passare la stessa directory di destinazione (ad esempio, se lo hai interrotto con Ctrl+ C), anche se otterrai failed to create symbolic link
errori per i collegamenti simbolici già esistenti e che potrebbero creare confusione.
Probabilmente non vuoi passare il nome di una directory che esiste già e contiene file non correlati (come la tua home directory) a make-symlinks
. In tal caso, puoi aspettarti di creare un sacco di symlink e sottocartelle. Probabilmente vuoi usare una nuova directory - o una che non esiste ancora - per make-symlinks
.
Importare l'albero dei collegamenti simbolici appena creato in Shotwell.
Dopo l'esecuzione make-symlinks
, importa semplicemente la directory che hai passato in Shotwell, utilizzando uno dei metodi indicati nella prima parte di questa risposta ( "Apertura di una cartella di immagini (comprese le sottocartelle) in Shotwell" ). Ad esempio, è possibile aprire Shotwell e trascinare la cartella in.
Poiché tutte le voci nella cartella sono collegamenti simbolici a .cr2
file o directory che li contengono, senza altri tipi di file, Shotwell non dovrebbe vedere nessuno degli altri file.