Normalmente, você deseja apenas abrir o Shotwell e arrastar a pasta.
Se necessário, você pode fazer com que o shell crie uma lista de arquivos CR2 e diga à Shotwell para abrir apenas esses arquivos. Ocasionalmente, pode ser o que você deseja, mas, neste caso , 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) residentes no mesmas pastas que as imagens que você abriu.
Para garantir que o Shotwell tenha conhecimento apenas das imagens em que você está interessado, você pode clonar a árvore de diretórios em outro lugar, copiando apenas os .cr2
arquivos e as pastas que os contêm, mas nada mais. Isso pode ocupar espaço adicional substancial, no entanto. Portanto, outra abordagem é construir uma hierarquia de links simbólicos - onde, em vez de ter uma nova árvore de diretórios de cópias dos.cr2
arquivos originais , você tem uma nova árvore de diretórios syminks para eles. Isso ocupa muito menos espaço.
Esta resposta cobre todas essas abordagens.
Abrindo uma pasta de imagens (incluindo subpastas) no Shotwell
O próprio Shotwell oferece duas maneiras de abrir uma árvore de diretórios inteira de fotos. Se isso funcionar para você, você não precisará fazer nada inteligente na linha de comando ou nem mesmo usá-lo. Caso contrário, 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 .cr2
arquivos, poderá usar uma destas maneiras para abri-lo.)
Caminho 1: Basta abrir a pasta inteira no Shotwell.
Em Shotwell, no menu Arquivo , clique em Importar da pasta . Em seguida, selecione a pasta da qual deseja importar imagens. Isso não se limitará 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.
Consulte a resposta de Jakob para Mostrar todas as imagens recursivamente (inclua qualquer subpasta) para obter mais informações.
Caminho 2: Arraste a pasta para Shotwell.
Na maioria dos ambientes de desktop 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 Importar da Pasta , essa é outra maneira pela qual a Shotwell recomenda 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 possui várias bibliotecas configuradas, basta arrastar basicamente para qualquer lugar e ele funciona. (Você nem precisa arrastar para o painel esquerdo.)
Esse método é muito conveniente e é tão poderoso quanto selecionar manualmente a pasta (em Arquivo > Importar da pasta , conforme descrito acima). Quando você abre arquivos ou pastas usando um desses métodos , o Shotwell oferece a opção de abrir as fotos sem copiá-las em sua biblioteca.
Para importar sem copiar, clique em Importar no local em vez de Copiar fotos .
Iniciando o 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, poderá executar o shotwell
comando e passar o nome do arquivo de cada imagem para ele como argumento. A Globstar facilita:
shopt -s globstar
shotwell **/*.cr2
Isso abre os .cr2
arquivos localizados em qualquer lugar do diretório atual. É diferente de executar o Shotwell e, em seguida, arrastar a pasta, pois o Shotwell tentará apenas importar os arquivos cujos nomes você deu. No entanto, como o Shotwell geralmente mostra outros arquivos de imagem das mesmas pastas que os arquivos que você pediu para abrir, isso pode não ser adequado às suas necessidades. (E mais informações que você forneceu sobre o seu problema sugerem que não está . Veja abaixo uma alternativa.)
Isso 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 deseja abri-los no Shotwell. A menos que você tenha deliberadamente nomeado 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, o macOS geralmente adiciona esses arquivos (por exemplo, ._kittens.cr2
para uma imagem real kittens.cr2
) ao acessar mídia externa (incluindo unidades flash e câmeras digitais).
Se você também deseja encontrar 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 ambos globstar
e dotglob
para o shopt
builtin:
shopt -s globstar dotglob
Por padrão, os globs diferenciam maiúsculas de minúsculas. Mas você pode querer para coincidir com nomes caso insensível , de modo a abrir arquivos que terminam em .cr2
, .Cr2
, .cR2
, e .CR2
. Para fazer isso, qualquer um:
Ative o nocaseglob executando shopt -s
com nocaseglob
, sozinho ou com outras opções de shell. Por exemplo, para executar shotwell
em todos os .cr2
arquivos, pesquisando sem distinção entre maiúsculas e minúsculas e incluindo .
-files e arquivos em .
-directories:
shopt -s globstar dotglob nocaseglob
shotwell **/*.cr2
Ou use em .[cC][rR]2
vez de .cr2
no seu próprio padrão glob. Por exemplo, isso realiza o mesmo que acima:
shopt -s globstar dotglob
shotwell **/*.[cC][rR]2
Observe que a distinção entre maiúsculas e minúsculas é totalmente separada da correspondência ou não de .
arquivos e pastas. Você pode remover dotglob
dos exemplos acima e eles ainda podem fazer distinção entre maiúsculas e minúsculas.
Para especificar um diretório, em vez de apenas usar o diretório atual, coloque seu nome e a /
antes da **/*.cr2
glob. Por exemplo, substituir o shotwell
comando acima por este abrirá todos os .cr2
arquivos dentro do Pictures
subdiretório do diretório inicial:
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 à Shotwell para abrir os mesmos arquivos.
Teste
Se você realmente precisa usar o terminal para isso, acho que pode fazer parte de algo mais complexo. Se desejar, você pode testar esses comandos antes de executá-los, substituindo-os shotwell
por printf '%s\n'
. Em vez de passar os nomes de arquivos para Shotwell, os lista 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 shell do globstar foi ativada para funcionar, que foi o que o shopt -s globstar
comando (acima) fez. Se já estiver ativado, não será necessário vários comandos. E você só precisa definir o globstar uma vez por instância do shell.
Você pode desativar o globstar executando:
shopt -u globstar
E você pode verificar se a globstar está ativada ou desativada executando:
shopt globstar
Se você estiver usando o globstar em um script, considere desativá-lo novamente, se houver um código que vem depois no mesmo script que não foi escrito com o globstar em mente. Por exemplo, escrever **
quando você quer dizer *
geralmente não é um problema quando o globstar está desativado, mas com o globstar ativado, 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 shopt -u
para desmarcá-las ao mesmo tempo. Por exemplo, para desativar globstar,
dotglob
e nocaseglob
:
shopt -u globstar dotglob nocaseglob
Comparado à globstar, há menos erros sérios que você pode cometer, porque se esqueceu de deixar o dotglob ou nocaseglob ativado. Mas outras pessoas (incluindo pessoas que você consulta em sites como o Ask Ubuntu) geralmente assumem que o dotglob e o nocaseglob estão desativados quando sugerem comandos para você usar, a menos que você diga o contrário.
Para obter mais informações sobre essas opções de shell relacionadas ao glob (e também sobre globs em geral ), consulte o manual de referência do bash . Todos são abordados principalmente no 4.3.2 The Shopt Builtin . Para globstar, consulte também 3.5.8.1 Correspondência de padrões . Para dotglob, consulte também 3.5.8 Expansão do nome do arquivo .
Criando uma nova árvore de diretórios
Como no seu caso, você realmente precisa que o Shotwell mostre apenas .cr2
arquivos, não possui .cr2
arquivos nas mesmas pastas que os .cr2
arquivos, e a navegação por imagens no Shotwell também oferece esses arquivos automaticamente , parece que você precisará de uma pasta que não contém outros arquivos de imagem além dos que .cr2
você está tentando abrir.
Mover os arquivos, como você sugeriu , é uma abordagem, mas eu recomendo copiar os arquivos ou, melhor, criar links simbólicos para os arquivos (consulte também FOLDOC ), porque:
- Se você estiver movendo os arquivos entre dispositivos, isso exige cópia de qualquer maneira, portanto, nesse caso, a movimentação não é mais rápida.
- Se você tiver espaço, geralmente é uma boa ideia manter uma pasta não modificada de tudo o que você começou, até que você esteja satisfeito com o fato de que o que você fez está 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 fácil de ler exatamente o que foi recuperado e de onde.
- Se você optar por criar links simbólicos, a quantidade de espaço adicional consumido será 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.)
Também há outra decisão a ser tomada. Você cria todas as novas entradas (sejam cópias ou links simbólicos) no mesmo diretório, nivelando 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 .cr2
arquivo?
Achatar a hierarquia de arquivos permite que você veja todos os arquivos de uma só vez, facilmente. 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 nivelamento da hierarquia de arquivos, porém, é o que acontece se você tiver dois ou mais arquivos com o mesmo nome em locais diferentes . Se você nivelar a hierarquia do arquivo, dependendo de como você o fizer, 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ê "mover" com êxito vários arquivos para o mesmo arquivo, perderá todos, exceto o último!
Devido às desvantagens de achatar tudo em um único diretório sem subdiretórios, as abordagens adotadas aqui criam 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 que eu 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 nos caminhos - são dados lá e não aqui.
Quando você precisa copiar uma árvore de diretórios e personalizar a operação de cópia, geralmente deve usar em rsync
vez de cp
. Este é um daqueles casos.
Substituindo src
pelo caminho para o diretório de nível superior que contém todos os seus arquivos CR2 e substituindo dest
pelo nome do diretório que você deseja criar que conterá uma hierarquia de links simbólicos para os arquivos CR2, execute:
rsync -rl --prune-empty-dirs --include='*/' --include='*.cr2' --exclude='*' src/ dest
Não esqueça o /
depois do nome do diretório de origem, a menos que você queira criar um diretório de nível superior adicionaldest
. Ou seja, se você omitir a trilha /
, rsync
criará o diretório de destino para você, dentro dest
. Por exemplo, suponha que src
seja um caminho relativo que não contém /
. Então:
- Com
src/
seu rsync
comando, você obtém um link simbólico dest/foo/bar.cr2
para o arquivo src/foo/bar.cr2
.
- Com
src
seu rsync
comando, você obtém um link simbólico para o arquivo .dest/src/foo/bar.cr2
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 que o diretório de nível superior que contém os .cr2
arquivos para os quais os links simbólicos apontarão, eu recomendo que você inclua /
no final do destino nome do diretório em seu rsync
comando. (E, para o diretório de origem, atribua a ele um diretório que esteja vazio, que não exista ou que seja dedicado a esse propósito. Caso contrário, você estará bagunçando alguma outra pasta.)
Como é geralmente o caso quando você passar o nome de um arquivo ou diretório para um programa de linha de comando ou script, se o seu destino ou origem os caminhos de diretório conter espaços em branco (ou caracteres tratados especialmente pelo shell, como \
, $
, '
, e vários outra pontuação), então você terá que citá-las . Eu detalhei como fazer isso, no caso mais comum de espaços, no "Caminho 2" - os conselhos sobre citações nessa seção se aplicam aqui também. No entanto, se você não tiver certeza de como citar o nome de uma pasta, 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 .cr2
arquivos e as pastas que os contêm, você pode abrir a pasta de destino em Shotwell. (Consulte "Abrindo uma pasta de imagens (incluindo subpastas) no Shotwell" acima.) No entanto, antes de executar rsync
, recomendo que você decida se deseja pular as entradas que começam com .
e se deseja incluir entradas com sufixos de variante de maiúsculas e minúsculas. Nesse caso, você terá que executar algum rsync
comando ligeiramente diferente .
Personalizando o manuseio de entradas pontilhadas e a distinção entre maiúsculas e minúsculas
Você pode usar um rsync
comando diferente para alterar se os arquivos e diretórios que começam com um ponto são ignorados e se deseja ou não a distinção entre maiúsculas e minúsculas na correspondência do sufixo .cr2
.
O comando acima faz incluir diretórios e arquivos cujos nomes começam com .
. Para excluir esses arquivos e diretórios, colocar --exclude='.*/' --exclude='.*'
antes de todas as outras --include
s e --exclude
s. Ou seja, use este rsync
comando (com as substituições apropriadas src
e dest
, é claro):
rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.cr2' --exclude='*' src/ dest
Os rsync
comandos mostrados até agora têm sido maiúsculas de minúsculas e não copiar os arquivos que terminam em .CR2
, .Cr2
ou .cR2
em vez de .cr2
. Se você deseja que esses arquivos sejam copiados, será necessário contabilizar isso usando o --include
padrão *.[cC][rR]2
no lugar de *.cr2
.
Este terceiro comando não diferencia maiúsculas de minúsculas e (como o primeiro comando) não ignora arquivos e diretórios cujos nomes começam com .
:
rsync -rl --prune-empty-dirs --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest
Se você adota a abordagem de copiar arquivos rsync
e não tem certeza de qual desses comandos deseja, sugiro usá- lo se quiser não perder nada. No entanto, você deve estar ciente de que os arquivos de ponto podem conter metadados, e os arquivos de ponto nomeados como imagens podem não ser realmente imagens. Veja as discussões sobre os arquivos de pontos na seção "Iniciando o Shotwell com uma lista de nomes de arquivos de imagem" acima e sobre os arquivos de pontos e a distinção entre maiúsculas e minúsculas no "Caminho 2" abaixo.
Este quarto comando é case-insensitive e (como o segundo comando) faz arquivos, pule e diretórios cujos nomes começam com .
:
rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest
Caminho 2: Criando links simbólicos
É isso que eu recomendo que você faça, embora o Caminho 1 seja bom 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 .cr2
arquivos e percorre a lista, criando diretórios de destino conforme necessário e preenchendo-os com links simbólicos para cada .cr2
arquivo.
Isso é complicado o suficiente para sugerir colocá-lo em um script, em vez de digitá-lo interativamente. Você pode colocar o script onde quiser, mas por conveniência, mostrarei como fazê-lo com o script colocado diretamente na sua pasta pessoal.
Escreva (ou cole) o script.
Crie um arquivo de texto,, make-symlinks
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ê pode fazê-lo executando cat > ~/make-symlinks
, colando o conteúdo do arquivo e pressionando Ctrl+ Dem uma nova linha, se desejar.)
Se você nomear o script como algo diferente make-symlinks
, certifique-se de usá-lo ao executar comandos que usam o script posteriormente.
#!/bin/bash
shopt -s globstar dotglob nocaseglob
for f in **/*.cr2; do
mkdir -p "$1/$(dirname "$f")"
ln -s "$PWD/$f" "$1/$f"
done
Coloque isso no arquivo e salve o arquivo. Este script usa globstar, um recurso do Bash explicado acima em "Iniciando o Shotwell com uma lista de nomes de arquivos de imagem" .
Você pode alterar como ele lida com entradas pontilhadas e com distinção entre maiúsculas e minúsculas.
Dependendo das suas necessidades, convém fazer algumas alterações:
Se você não deseja incluir .cr2
arquivos cujos nomes começam com .
ou que residem em diretórios cujos nomes começam com .
, remova dotglob
da shopt
linha.
Arquivos e diretórios cujo nome começa com .
frequentemente são usados para metadados (consulte a seção "Iniciando o Shotwell com uma lista de nomes de arquivos de imagem" acima). Por outro lado, se você quiser ter tudo, ou se houver algo inexplicavelmente faltando que você tem certeza de que existe, mantenha-o dotglob
.
Se você quiser incluir apenas os arquivos que terminam em exatamente .cr2
, mas não variantes de casos ( .CR2
, .Cr2
e .cR2
), então você deve remover nocaseglob
. Como a sua situação envolve recuperação de dados e o Shotwell não mostrará nenhum dos arquivos que você perdeu ao abrir o diretório de links simbólicos - esse é o objetivo desse método, afinal - você provavelmente desejará manter nocaseglob
.
Torne executável.
Execute este comando para marcar seu script como executável:
chmod +x ~/make-symlinks
Execute-o na fonte e passe o destino como argumento.
Em seguida, mude 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 Pictures
subdiretório do diretório inicial, você executaria:
cd ~/Pictures
É aqui que você executa o script. Passe o diretório de destino para o script como um argumento da linha de comandos.
Por exemplo, se você deseja que um diretório chamado cr2s
seja criado na área de trabalho para conter os links simbólicos, execute:
~/make-symlinks ~/Desktop/cr2s
Ou se você deseja apenas esse diretório diretamente na sua pasta pessoal:
~/make-symlinks ~/cr2s
Ou se você possui uma unidade montada /media/you/MyDrive
e deseja criar uma pasta nela chamada links
para conter os links simbólicos:
~/make-symlinks /media/you/MyDrive/links
Mas se a unidade estiver /media/you/My Drive
(com um espaço), você deverá usar a cotação. Qualquer um desses trabalhos (use apenas um, não execute todos):
~/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 ~
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
make-symlinks
cria o diretório de destino para você, se ele ainda não existir, assim como cria subdiretórios dentro dele. No entanto, ele ainda funciona se o destino já existir.
Você pode até executá-lo várias vezes e transmitir o mesmo diretório de destino (por exemplo, se você o interrompeu com Ctrl+ C), apesar de obter failed to create symbolic link
erros nos links simbólicos que já existem e que podem ser confusos.
Você provavelmente não deseja passar o nome de um diretório que já existe e contém arquivos não relacionados (como o diretório inicial) make-symlinks
. Se você o fizer, pode esperar que um monte de links simbólicos e subpastas sejam criados nele. Você provavelmente deseja usar um novo diretório - ou um que ainda não exista - para make-symlinks
.
Importe a árvore de link simbólico recém-criada para o Shotwell.
Depois de executar make-symlinks
, basta importar o diretório que você passou para o Shotwell, usando um dos métodos fornecidos na primeira parte desta resposta ( "Abrindo uma pasta de imagens (incluindo subpastas) no Shotwell" ). Por exemplo, você pode abrir o Shotwell e arrastar a pasta.
Como todas as entradas na pasta são links simbólicos para .cr2
arquivos ou diretórios que os contêm, sem outros tipos de arquivos, o Shotwell não deve ver nenhum dos outros arquivos.