Normalmente, você só precisa abrir o Shotwell e arrastar a pasta.
Se você precisar, você pode fazer o shell construir uma lista de arquivos CR2 e dizer ao Shotwell para abrir apenas esses arquivos. Ocasionalmente, isso pode ser o que você quer, mas, nesse caso, que não fez exatamente o que você precisava devido ao comportamento de Shotwell - em algumas outras circunstâncias, um recurso - de mostrar automaticamente outros arquivos de imagem (de todos os tipos) residindo nas mesmas pastas que as imagens que você abriu.
Para garantir que a Shotwell saiba apenas sobre as imagens que você está interessado, você pode clonar a árvore de diretórios em outro lugar, copiando apenas .cr2
arquivos e as pastas que os contêm, mas nada mais. Isso pode ocupar espaço adicional substancial, no entanto. Então, outra abordagem é construir uma hierarquia de links simbólicos - onde, em vez de ter uma nova árvore de diretórios cópias de seus arquivos .cr2
originais, você tem uma nova árvore de diretórios syminks para . Isso ocupa muito menos espaço.
Esta resposta abrange todas essas abordagens.
Abrindo uma pasta de imagens (incluindo subpastas) em Shotwell
O próprio Shotwell oferece duas maneiras de abrir uma árvore de diretórios inteira de fotos. Se isso funcionar para você, então você não precisará fazer nada inteligente na linha de comando ou mesmo usá-lo. Se não, você pode acabar fazendo isso em conexão com outra técnica. (Por exemplo, se você acabar criando um novo diretório de links simbólicos ou cópias de seus arquivos .cr2
, você pode usar uma destas maneiras para abri-lo.)
Caminho 1: basta abrir a pasta inteira em Shotwell.
Em Shotwell, no menu Arquivo , clique em Importar da pasta . Em seguida, selecione a pasta da qual você deseja importar imagens. Isso não será limitado a .cr2
arquivos, mas se você estiver abrindo arquivos de várias subpastas contendo .cr2
imagens criadas a partir de uma câmera digital, provavelmente esses serão os únicos arquivos presentes.
Veja a resposta de Jakob para Mostrar todas as imagens recursivamente (incluir quaisquer subpastas) para obter mais informações.
Caminho 2: Arraste a pasta para o Shotwell.
Com a maioria dos ambientes de trabalho e navegadores de arquivos, você também pode abrir o Shotwell e arrastar a pasta que contém suas imagens para a janela do Shotwell. Como Import from Folder , essa é outra maneira que Shotwell recomenda para abrir fotos.
Ao arrastar de uma janela do navegador de arquivos ou da área de trabalho para o Shotwell, você pode arrastar para uma biblioteca específica. Ou se você não tem várias bibliotecas configuradas, você pode simplesmente arrastar basicamente para qualquer lugar e funciona. (Você não precisa nem arrastar para o painel esquerdo).
Este método é muito conveniente, e é tão poderoso quanto selecionar manualmente a pasta (com Arquivo > Importar da Pasta , como descrito acima). Quando você abre arquivos ou pastas usando qualquer um desses métodos , a Shotwell oferece a opção de abrir as fotos sem copiá-las para a biblioteca.
Para importar sem copiar, clique em Importar no lugar em vez de Copiar fotos .
Lançamento do Shotwell com uma lista de nomes de arquivos de imagem
Se por algum motivo você quiser ou precisar fazer isso executando um comando no Terminal, você pode executar o comando shotwell
e passar o nome de arquivo de cada imagem para ele como um argumento. A Globstar facilita:
shopt -s globstar
shotwell **/*.cr2
Isso abre os arquivos .cr2
localizados em qualquer lugar no diretório atual. Ele difere da execução de Shotwell e depois arrasta a pasta, em que Shotwell tentará apenas importar os arquivos cujos nomes você der. No entanto, como o Shotwell geralmente mostra outros arquivos de imagem das mesmas pastas que os arquivos que você disse para abrir, isso pode não ser adequado às suas necessidades. (E mais informações sobre o seu problema sugerem que ele não é . Veja abaixo uma alternativa.)
Este não inclui arquivos ou subpastas cujos nomes começam com .
. No entanto, se você tiver arquivos CR2 cujos nomes começam com um ponto, na maioria das vezes você provavelmente não quer abri-los no Shotwell.A menos que você nomeie deliberadamente seus arquivos ou pastas dessa maneira, é mais provável que um arquivo de ponto com uma extensão de nome de arquivo de imagem ou documento seja um arquivo de metadados em vez de uma imagem ou documento real. Por exemplo, macOS geralmente adiciona tais arquivos (por exemplo, ._kittens.cr2
para uma imagem real kittens.cr2
) ao acessar mídia externa (incluindo pen drives e câmeras digitais).
Se você quiser que o também encontre arquivos cujos nomes começam com .
ou que estão em pastas cujos nomes começam com .
, ative também o dotglob. Você pode fazer isso com shopt -s dotglob
ou passando globstar
e dotglob
para shopt
builtin:
shopt -s globstar dotglob
Por padrão, globs diferenciam maiúsculas de minúsculas. Mas você pode querer que associe nomes de arquivo sem distinção entre maiúsculas e minúsculas , para abrir arquivos que terminem em .cr2
, .Cr2
, .cR2
e .CR2
. Para fazer isso:
-
Ative o nocaseglob executando
shopt -s
comnocaseglob
, sozinho ou com outras opções de shell. Por exemplo, para executarshotwell
em todos os arquivos.cr2
, pesquisando sem distinção entre maiúsculas e minúsculas e incluindo.
-files e arquivos em.
-diretórios:shopt -s globstar dotglob nocaseglob shotwell **/*.cr2
-
Ou , use
.[cC][rR]2
em vez de.cr2
em seu próprio padrão glob. Por exemplo, isso faz o mesmo que acima:shopt -s globstar dotglob shotwell **/*.[cC][rR]2
Observe que a diferenciação de maiúsculas e minúsculas é totalmente separada de se
.
arquivos e pastas são correspondidos ou não. Você pode removerdotglob
dos exemplos acima e eles ainda podem não diferenciar maiúsculas de minúsculas.
Para especificar um diretório em vez de apenas usar o diretório atual, coloque seu nome e um /
antes do **/*.cr2
glob. Por exemplo, substituir o comando shotwell
acima por este abrirá todos os arquivos .cr2
dentro do subdiretório Pictures
do seu diretório pessoal:
shotwell ~/Pictures/**/*.cr2
Ao contrário do primeiro comando que usa seu diretório atual, não importa onde você execute esse comando, você estará dizendo a Shotwell para abrir os mesmos arquivos.
Teste
Se você realmente tem que usar o terminal para isso, então eu acho que pode ser parte de algo mais complexo. Se desejar, você pode testar esses comandos antes de executá-los substituindo shotwell
por printf '%s\n'
. Em vez de passar os nomes dos arquivos para Shotwell, isso os relaciona um por linha. Por exemplo, na minha máquina:
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
Desativando o Globstar e outras opções de shell
A opção de shell globstar está habilitada para funcionar, que é o que o comando shopt -s globstar
(acima) fez. Se já estiver ativado, você não precisa de vários comandos. E você só precisa definir globstar uma vez por instância de shell.
Você pode desativar o globstar executando:
shopt -u globstar
E você pode verificar se o globstar está ativado ou desativado executando:
shopt globstar
Se você estiver usando globstar em um script, você deve considerar desativá-lo se houver código que venha depois no mesmo script que não tenha sido escrito com globstar em mente. Por exemplo, escrever **
quando você quer dizer *
geralmente não é problema quando o globstar está desativado, mas com o globstar ativado, ele pode causar sérios problemas ao fazer um comando afetar muito mais arquivos do que alguém pretendia.
Da mesma forma, se você usou dotglob ou nocaseglob e deseja desativá-los, pode fazê-lo com shopt -u dotglob
e shopt -u nocaseglob
, respectivamente. Você também pode passar várias opções de shell para shopt -u
para desativá-las ao mesmo tempo. Por exemplo, para desativar globstar,
dotglob
e nocaseglob
:
shopt -u globstar dotglob nocaseglob
Comparado ao globstar, há menos erros sérios que você pode cometer porque esqueceu que deixou o dotglob ou o nocaseglob. Mas outras pessoas (incluindo pessoas que você consulta em sites como o Ask Ubuntu) geralmente assumem que dotglob e nocaseglob são desativados quando eles sugerem comandos para você usar, a menos que você diga o contrário.
Para mais informações sobre estas opções de shell relacionadas ao glob (e também sobre globs em geral ), consulte o manual de referência bash . Todos eles são abordados principalmente em 4.3.2 O Shopt Builtin . Para globstar, veja também 3.5.8.1 Pattern Matching . Para o dotglob, veja também 3.5.8 Expansão do nome do arquivo .
Criando uma nova árvore de diretórios
Desde no seu caso você parece realmente precisar que a Shotwell mostre apenas % arquivos co_de%, você tem arquivos que não são .cr2
nas mesmas pastas com .cr2
arquivos e navegação de imagens no Shotwell também oferecem automaticamente esses arquivos , parece que você precisará ter uma pasta que não contenha nenhum outro arquivo de imagem além dos arquivos .cr2
que você está tentando abrir.
Mover os arquivos, como você sugeriu , é uma abordagem, mas eu recomendo copiando os arquivos ou, melhor, fazendo links simbólicos para os arquivos (veja também FOLDOC ), porque:
- Se você estiver movendo os arquivos pelos dispositivos, isso exigirá a cópia de qualquer maneira. Nesse caso, a movimentação não é mais rápida.
- Se você tiver espaço, é sempre uma boa ideia manter uma pasta não modificada de tudo o que começou, até que esteja satisfeito de que o que você fez esteja correto de acordo com suas necessidades. Obviamente, isso nem sempre é aplicável ou prático. Mas no seu caso, esses arquivos são o resultado de uma operação de recuperação de dados. Pode ser útil manter um registro facilmente lido do que foi recuperado e de onde.
- Se você optar por criar links simbólicos, a quantidade de espaço adicional consumido é extremamente pequena . (Se o disco de destino estiver completamente cheio , você ainda precisará liberar espaço nele - ou usar um disco de destino diferente - para criar links simbólicos.)
Existe outra decisão para você fazer também. Você cria todas as novas entradas (sejam elas cópias ou links simbólicos) no mesmo diretório, achatando a hierarquia de arquivos? Ou você cria diretórios no destino correspondente a cada um dos diretórios na origem que contém pelo menos um arquivo .cr2
?
-
Achatar a hierarquia de arquivos permite ver todos os arquivos de uma vez, com facilidade. Em particular, é fácil ver os nomes e tamanhos dos arquivos de uma só vez, bem como selecionar qualquer combinação dos arquivos em um navegador de arquivos gráfico.
-
Mas também perde informações sobre em quais pastas elas estavam, o que pode ser valioso (embora você possa retornar à pasta original e procurá-las lá, se não mover os arquivos).
-
O maior problema com o achatamento da hierarquia de arquivos, no entanto, é o que acontece se você tiver dois ou mais arquivos com o mesmo nome em locais diferentes . Se você nivelar a hierarquia de arquivos, dependendo de como você faz isso, todos, exceto o primeiro, não serão copiados (ou vinculados) e você receberá um erro ou aviso, ou todos, exceto a última cópia (ou link) ser substituído .
Esse é outro motivo pelo qual recomendo copiar ou criar links simbólicos em vez de mover arquivos. Se você "moveu" com sucesso vários arquivos para o mesmo arquivo, você perdeu todos menos o último!
Por causa das desvantagens de nivelar tudo em um único diretório sem subdiretórios, as abordagens que eu tomo aqui constroem uma nova árvore de diretórios no destino.
Caminho 1: copiando
Mostro isso primeiro porque é um pouco mais simples, mas sugiro que você crie links simbólicos ("Caminho 2"), especialmente se a unidade de destino não tiver espaço suficiente para armazenar todos os arquivos. O "Caminho 2", que é um pouco mais complicado, é muito mais detalhado porque parece haver menos recursos sobre como usar essa técnica, é o modo como espero que a maioria das pessoas nessa situação prefira e as informações que se aplicam aos dois métodos - conselhos básicos sobre como escapar de espaços em caminhos - é dado lá e não aqui.
Quando você precisar copiar uma árvore de diretórios e precisar personalizar a operação de cópia, geralmente deve usar .cr2
em vez de rsync
. Este é um desses casos.
Substituindo cp
pelo caminho para o diretório de nível superior contendo todos os seus arquivos CR2 e substituindo src
pelo nome do diretório que você deseja criar que conterá uma hierarquia de links simbólicos para os arquivos CR2, executar:
rsync -rl --prune-empty-dirs --include='*/' --include='*.cr2' --exclude='*' src/ dest
Não se esqueça do dest
após o nome do diretório de origem, a menos que você queira que um diretório adicional de nível superior seja criado dentro de /
. Ou seja, se você omitir o dest
, então /
fará o diretório de destino para você, dentro de rsync
. Por exemplo, suponha que dest
seja um caminho relativo que não contenha src
. Então:
- Com
/
no comandosrc/
, você recebe um link simbólicorsync
para o arquivodest/foo/bar.cr2
. - Com
src/foo/bar.cr2
no comandosrc
, você recebe um link simbólicorsync
para o arquivodest/src/foo/bar.cr2
.
Como pode ser confuso para o diretório de nível superior onde os links simbólicos serão colocados com o mesmo nome do diretório de nível superior que contém os arquivos src/foo/bar.cr2
para os quais os links simbólicos apontarão, recomendo incluir o .cr2
no final do nome do diretório de destino em seu comando /
. (E, para o diretório fonte, dê a ele um diretório que esteja vazio, não exista ou seja dedicado a esse propósito. Caso contrário, você estará bagunçando alguma outra pasta.)
Como geralmente é o caso quando você passa o nome de um arquivo ou diretório para um programa ou script de linha de comando, se os caminhos de diretório de destino ou fonte contiverem espaços em branco (ou caracteres tratados especialmente pelo shell, como rsync
, \
, $
e várias outras pontuações), então você terá que citá-las . Eu detalhei como fazer isso, para o caso mais comum de espaços, em "Way 2" - o conselho sobre a citação nessa seção se aplica aqui também. No entanto, se você não tiver certeza de como citar o nome de uma pasta, você pode fazer com que o Ubuntu faça isso simplesmente arrastando a pasta para o Temrminal; seu caminho completo será colado com a cotação correta .
Depois de copiar apenas os arquivos '
e as pastas que os contêm, você pode abrir a pasta de destino no Shotwell. (Veja "Abrindo uma Pasta de Imagens (Incluindo Subpastas) em Shotwell" acima.) No entanto, antes de executar .cr2
, eu recomendo que você decida se deseja pular entradas que começam com rsync
e se você deseja incluir entradas com sufixos de variante de maiúsculas e minúsculas. Nesse caso, você terá que executar um comando .
ligeiramente diferente.
Personalizando o manuseio de entradas pontilhadas e diferenciação de maiúsculas e minúsculas
Você pode usar um comando rsync
diferente para alterar se os arquivos e diretórios que começam com um ponto são ignorados e se você deseja ou não distinção entre maiúsculas e minúsculas ao coincidir o sufixo rsync
.
O comando acima inclui os diretórios e arquivos cujos nomes começam com .cr2
. Para excluir esses arquivos e diretórios, coloque .
antes de todos os outros --exclude='.*/' --exclude='.*'
s e --include
s. Ou seja, use este comando --exclude
(com as substituições apropriadas para rsync
e src
, é claro):
rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.cr2' --exclude='*' src/ dest
Os comandos dest
mostrados até aqui têm sido sensíveis a maiúsculas e minúsculas e não copiarão arquivos que terminem em rsync
, .CR2
ou .Cr2
em vez de .cR2
. Se você quiser que esses arquivos sejam copiados, será necessário contabilizar isso usando .cr2
pattern --include
no lugar de *.[cC][rR]2
.
Este terceiro comando é insensível a maiúsculas e minúsculas e (como o primeiro comando) não pula arquivos e diretórios cujos nomes começam com *.cr2
:
rsync -rl --prune-empty-dirs --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest
Se você usar a abordagem de copiar arquivos com .
e não tiver certeza sobre quais desses comandos deseja, sugiro usar esse se quiser ter certeza de não perder qualquer coisa. No entanto, você deve estar ciente de que os dotfiles podem conter metadados, e os dotfiles denominados como imagens podem não ser realmente imagens. Veja as discussões em dotfiles na seção "Lançamento do Shotwell com uma lista de nomes de arquivos de imagem" acima, e em dotfiles e case sensitive em "Way 2" abaixo.
Este quarto comando é insensível a maiúsculas e minúsculas e (como o segundo comando) pula arquivos e diretórios cujos nomes começam com rsync
:
rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest
Caminho 2: criando links simbólicos
Isto é o que eu recomendo que você faça, apesar de a Way 1 estar bem se você tiver espaço suficiente na unidade de destino. Você não precisa ler o Caminho 1 para usar isso.
O método apresentado aqui faz uma lista de .
arquivos e percorre a lista, criando diretórios de destino conforme necessário e preenchendo-os com links simbólicos para cada arquivo .cr2
.
Isso é complicado o suficiente para que eu sugira colocá-lo em um script, em vez de apenas digitá-lo interativamente. Você pode colocar o script onde quiser, mas, por conveniência, mostrarei como fazer isso com o script colocado diretamente na sua pasta pessoal.
Escreva (ou cole) o script.
Crie um arquivo de texto, .cr2
, na sua pasta pessoal. Nenhuma extensão de arquivo é necessária.
Você pode fazer isso com qualquer editor de texto, como Vim, Nano, Gedit ou Leafpad. Não use um processador de texto como o LibreOffice Writer. (Você poderia até mesmo executar make-symlinks
, colando no conteúdo do arquivo e pressionando Ctrl + D em uma nova linha, se você quisesse.)
Se você nomear o script como algo diferente de cat > ~/make-symlinks
, certifique-se de usar esse nome ao executar comandos que usam o script mais tarde.
#!/bin/bash
shopt -s globstar dotglob nocaseglob
for f in **/*.cr2; do
mkdir -p "/$(dirname "$f")"
ln -s "$PWD/$f" "/$f"
done
Coloque isso no arquivo e salve o arquivo. Este script usa globstar, um recurso de Bash explicado acima em "Lançamento do Shotwell com uma lista de nomes de arquivo de imagem" .
Você pode alterar como ele lida com entradas pontilhadas e diferenciação de maiúsculas e minúsculas.
Dependendo das suas necessidades, você pode querer fazer algumas alterações:
-
Se você não quiser incluir
make-symlinks
arquivos cujos nomes começam com.cr2
ou que residem em diretórios cujos nomes começam com.
, remova.
da linhadotglob
.Arquivos e diretórios cujo nome começa com
shopt
são frequentemente usados para metadados (veja a seção "Abrindo Shotwell com uma lista de nomes de arquivos de imagem" acima). Por outro lado, se você quer ter certeza de que tem tudo, ou se há algo inexplicavelmente faltando que você tem certeza de que está lá, então deve ficar com.
. -
Se você deseja incluir somente arquivos que terminam exatamente com
dotglob
, mas não variantes de maiúsculas e minúsculas (.cr2
,.CR2
e.Cr2
), remova %código%. Já que sua situação envolve recuperação de dados e Shotwell não mostrará nenhum dos arquivos perdidos quando você abrir o diretório de links simbólicos - afinal, esse é o sentido desse método - você provavelmente deseja manter.cR2
.
Torne-o executável.
Execute este comando para marcar seu executável de script:
chmod +x ~/make-symlinks
Execute-o na fonte e passe o destino como um argumento.
Em seguida, altere o diretório para o diretório de origem, ou seja, a pasta de nível superior que contém as imagens. Por exemplo, se eles estiverem no subdiretório nocaseglob
do seu diretório inicial, você executaria:
cd ~/Pictures
Aqui é onde você executará o script. Passe o diretório de destino para o script como um argumento de linha de comando.
Por exemplo, se você quiser que um diretório chamado nocaseglob
seja criado em sua área de trabalho para conter os links simbólicos, execute:
~/make-symlinks ~/Desktop/cr2s
Ou se você quiser apenas esse diretório diretamente na sua pasta pessoal:
~/make-symlinks ~/cr2s
Ou se você tiver uma unidade montada em Pictures
e quiser criar uma pasta nela chamada cr2s
para conter os links simbólicos:
~/make-symlinks /media/you/MyDrive/links
Mas se a unidade for /media/you/MyDrive
(com um espaço), você deverá usar a cotação. Qualquer um desses trabalhos (use apenas um, não execute todos eles):
~/make-symlinks '/media/you/My Drive/links'
~/make-symlinks /media/you/'My Drive'/links
~/make-symlinks /media/you/My\ Drive/links
Mas se você usar links
para o seu diretório pessoal, não cite isso:
~/make-symlinks ~/'Two Words' # good
~/make-symlinks ~/Two\ Words # good
~/make-symlinks '~/Two Words' # BAD, because ~ doesn't get expanded
/media/you/My Drive
cria o diretório de destino para você, se ele ainda não existir, da mesma forma que cria subdiretórios dentro dele. No entanto, ainda funciona se o destino já existir.
Você pode até executá-lo várias vezes e passar o mesmo diretório de destino (por exemplo, se você o interrompeu com Ctrl + C ), embora você obtenha ~
erros para os links simbólicos que já existem, e isso pode ser confuso.
Você provavelmente não deseja passar o nome de um diretório que já existe e contém arquivos não relacionados (como seu diretório pessoal) para make-symlinks
. Se fizer isso, você pode esperar que um monte de links simbólicos e subpastas sejam criados nele. Você provavelmente quer usar um novo diretório - ou um que ainda não existe - para failed to create symbolic link
.
Importe a árvore de links simbólicos recém-criada para o Shotwell.
Depois de executar make-symlinks
, basta importar o diretório que você passou para ele em Shotwell, usando um dos métodos fornecidos na primeira parte desta resposta ( "Abrindo uma pasta de imagens (incluindo subpastas) em Shotwell" "). Por exemplo, você poderia abrir o Shotwell e arrastar a pasta.
Como todas as entradas na pasta são links simbólicos para make-symlinks
arquivos ou diretórios que os contêm, sem nenhum outro tipo de arquivo, a Shotwell não deve ver nenhum dos outros arquivos.