Eu quero que o shotwell abra todos os arquivos .cr2 em uma pasta e todas as suas subpastas, que linha de comando eu uso?

9

Algo como

shotwell *.cr2 ./

Isso não funciona, mas basicamente eu quero usar o shotwell para abrir todos os arquivos que terminam com .cr2 e no diretório atual (incluindo subpastas)

O contexto é que eu estou perdendo fotos que tirei na minha câmera que eu já excluí do meu cartão de memória.

Existem miniaturas para elas nas "imagens perdidas" do shotwell, mas não consigo encontrá-las. Então eu pensei em executar photorec para tentar encontrá-los. Como resultado, a photorec me deu um carregamento de pastas e arquivos, o suficiente para preencher meu disco rígido. Em vez de vasculhar todos os arquivos um por um, decidi procurar por arquivos .cr2 no meu disco rígido, evitando uma pasta específica chamada Photogs que eu sei que não os tem, porque eles não faziam parte do photorec data dump.

    
por user285884 02.01.2017 / 19:17

4 respostas

6

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 com nocaseglob , sozinho ou com outras opções de shell. Por exemplo, para executar shotwell 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 remover dotglob 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 comando src/ , você recebe um link simbólico rsync para o arquivo dest/foo/bar.cr2 .
  • Com src/foo/bar.cr2 no comando src , você recebe um link simbólico rsync para o arquivo dest/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 linha dotglob .

    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.

    
por Eliah Kagan 02.01.2017 / 21:04
5

O Shotwell percorrerá todas as imagens encontradas em todos os diretórios onde uma imagem estiver aberta, portanto, usar find -name '*.cr2' -exec shotwell '{}' + como sugerido originalmente não ajuda muito. Como as configurações do Shotwell são bastante limitadas, a única maneira que eu posso pensar em abrir apenas os arquivos que você quer é mover os arquivos para um novo diretório sozinhos.

Você pode usar find para isso:

mkdir ~/cr2files
find -type f -iname '*.cr2' -not -path './dir/*' -exec cp -v -- '{}' ~/cr2files \;

Substitua cp por mv se você quiser evitar a criação de arquivos duplicados.

Notas:

  • mkdir ~/cr2files cria um novo diretório no seu diretório pessoal
  • find procura recursivamente a partir do diretório atual para baixo, através da árvore
  • -type f procura apenas por arquivos
  • -iname procura arquivos pelo nome, ignorando o caso
  • '*.cr2' nomes terminando com .cr2 - use aspas para parar o shell expandindo o glob antes de ser passado para find
  • -not -path './dir/*' irá excluir o conteúdo do diretório dir dos resultados
  • {} representa os caminhos dos arquivos encontrados
  • -- após cp é informar cp para não aceitar mais nenhuma opção, o que evita qualquer nome de arquivo que comece com - causando problemas

Você pode então abrir qualquer arquivo no novo diretório com o Shotwell e percorrer todos eles

    
por Zanna 02.01.2017 / 20:29
2

Opção 1 - Usando xargs quando os nomes de arquivos contêm espaços

Como os comentários abaixo apontaram, usar back ticks (Opção 3 abaixo) será interrompido quando os nomes dos arquivos contiverem espaços. O método mais seguro de usar o comando find e passar a saída para shotwell usando a opção xargs é o seguinte:

find . -name "*.cr2" -print0 | xargs -0 shotwell

O sinalizador -print0 informa ao uso de delimitadores -0 (caractere nulo) entre nomes de arquivos, e o xargs sinalizador diz -exec para esperar esses delimitadores -exec .

Agradecemos as excelentes respostas encontradas aqui ( Como canalizar lista de arquivos retornados pelo comando find ) no Stack Overflow.

Opção 2 - Usando find quando os nomes de arquivos contêm espaços

Como um comentário abaixo, a opção shotwell também suporta nomes de arquivos contendo espaços. Outros comentários abaixo apontam as quebras quando o número de arquivos excede Isto ficaria assim:

find . -name "*.cr2" -exec shotwell {} +

Opção 3 - quando os nomes dos arquivos não têm espaços

Antigamente, antes dos nomes dos arquivos terem espaços e terem 256 caracteres, essa opção funcionava bem. Você encontrará essa opção mencionada em muitos outros sites, mas você não deve usar essa opção . No passado, usar o comando find e passar a saída para $(...) era o método mais simples:

shotwell 'find . -name "*.cr2"'

Isso inicia o . do diretório atual e inclui todos os subdiretórios:

  • Note o uso de back tick e não as aspas simples ' acima. O uso de back-ticks é semelhante a incluir a frase em find no bash.
  • O primeiro argumento /home/$USER/Pictures. um ponto inicial que é o diretório atual. Você poderia passar -name ou outra coisa em vez de shotwell .
  • O segundo argumento cat informa ao find para procurar nomes de arquivos (não diretórios).
  • Essa técnica funciona para todos os comandos, não apenas head . Por exemplo, você pode usá-lo para tail , %code% , %code% e a maioria dos outros comandos populares do Linux.
por WinEunuuchs2Unix 02.01.2017 / 19:28
-2

Eu não sabia que o Shotwell até abriu arquivos raw. Estou certo de que você pode obter mais quilometragem com digikam ou darktable. O Digikam vem com alguns componentes do Kde e é um bom gerenciador de fotos. Darktable vem com recursos de edição não destrutivos muito bons.

    
por user114644 03.01.2017 / 08:23