Quiero que shotwell abra todos los archivos .cr2 en una carpeta y todas sus subcarpetas, ¿qué línea de comando uso?


9

Algo como

shotwell *.cr2 ./

Eso no funciona, pero básicamente quiero usar shotwell para abrir todos los archivos que terminan en .cr2y en el directorio actual (incluidas las subcarpetas)

El contexto es que me faltan fotos que tomé en mi cámara y que he eliminado de mi tarjeta de memoria.

Hay miniaturas para ellos en las "imágenes faltantes" de shotwell, pero no puedo encontrarlas. Así que pensé en correr photorecpara tratar de encontrarlos. Como resultado, photorec me dio una gran cantidad de carpetas y archivos, lo suficiente como para llenar mi disco duro. En lugar de examinar todos los archivos uno por uno, decidí buscar archivos .cr2 en mi disco duro, evitando una carpeta particular llamada Photogsque sé que no los tiene porque esos no eran parte del photorecvolcado de datos.


@EliahKagan vea los comentarios (que continuaron en el chat) para obtener más detalles aquí . No estoy seguro de si y cómo editar la pregunta, así que por favor avise, dado que creó una respuesta tan hermosa
Zanna

@ user285884 Las ediciones más recientes de mi respuesta incluyen un procedimiento detallado para construir un árbol de enlaces simbólicos a solo archivos .cr2, que luego se pueden abrir en Shotwell (y algunos otros métodos). Esto debería superar el problema de ver archivos adicionales que no son .cr2 en Shotwell, así como el problema de no tener suficiente espacio en el dispositivo de destino para mover o copiar los archivos. No estaba seguro, desde el chat relevante , si ya resolviste esto.
Eliah Kagan

Respuestas:


6

Por lo general, solo querrá abrir Shotwell y arrastrar en la carpeta.

Si lo necesita, puede hacer que el shell construya una lista de archivos CR2 y decirle a Shotwell que abra solo esos archivos. Ocasionalmente, eso puede ser lo que desea, pero en este caso eso no hizo lo que necesitaba debido al comportamiento de Shotwell, en otras circunstancias, una característica, de mostrarle automáticamente otros archivos de imagen (de todos los tipos) que residen en el mismas carpetas que las imágenes que abriste.

Para asegurarse de que Shotwell solo conozca las imágenes que le interesan, puede clonar el árbol de directorios en otro lugar, copiando solo los .cr2archivos y las carpetas que los contienen, pero nada más. Sin embargo, eso puede ocupar un espacio adicional considerable. Por lo tanto, otro enfoque es construir una jerarquía de enlaces simbólicos , donde en lugar de tener un nuevo árbol de directorios de copias de sus .cr2archivos originales , tiene un nuevo árbol de directorios de syminks . Esto ocupa mucho menos espacio.

Esta respuesta cubre todos esos enfoques.

Abrir una carpeta de imágenes (incluidas las subcarpetas) en Shotwell

Shotwell en sí mismo le ofrece dos formas de abrir un árbol de directorios completo de fotos. Si esto funciona para usted, entonces no necesitará hacer nada inteligente en la línea de comando o incluso usarlo. Si no, podría terminar haciendo esto en conexión con otra técnica. (Por ejemplo, si termina creando un nuevo directorio de enlaces simbólicos o copias de sus .cr2archivos, puede usar una de estas formas para abrirlo).

Forma 1: simplemente abra la carpeta completa en Shotwell.

En Shotwell, en el menú Archivo , haga clic en Importar desde carpeta . Luego seleccione la carpeta desde la que desea importar imágenes. Esto no se limitará a los .cr2archivos, pero si está abriendo archivos de múltiples subcarpetas que contienen .cr2imágenes creadas desde una cámara digital, lo más probable es que sean los únicos archivos presentes.

Captura de pantalla del elemento de menú Importar desde carpeta en el menú Archivo de Shotwell.

Consulte la respuesta de Jakob a Mostrar todas las imágenes de forma recursiva (incluya cualquier subcarpeta) para obtener más información.

Camino 2: Arrastra la carpeta a Shotwell.

Con la mayoría de los entornos de escritorio y navegadores de archivos, también puede abrir Shotwell y arrastrar la carpeta que contiene sus imágenes a la ventana Shotwell. Al igual que Importar desde carpeta , esta es otra forma en que Shotwell recomienda abrir fotos.

Captura de pantalla de mí arrastrando mi carpeta de Escritorio a Shotwell para importar las imágenes que contiene.

Cuando arrastra desde una ventana del explorador de archivos o su escritorio a Shotwell, puede arrastrar a una biblioteca específica. O si no tiene varias bibliotecas configuradas, puede arrastrarlas básicamente a cualquier parte y funciona. (Ni siquiera tiene que arrastrar al panel izquierdo).

Este método es muy conveniente y es tan poderoso como seleccionar manualmente la carpeta (con Archivo > Importar desde carpeta , como se describió anteriormente). Cuando abre archivos o carpetas con cualquiera de estos métodos , Shotwell le ofrece la opción de abrir las fotos sin copiarlas en su biblioteca.

Captura de pantalla del cuadro de diálogo en Shotwell que le pide al usuario que elija entre copiar imágenes a la ubicación de su biblioteca de Shotwell o importarlas en su lugar, sin ninguna copia.

Para importar sin copiar, haga clic en Importar en el lugar en lugar de Copiar fotos .


Lanzamiento de Shotwell con una lista de nombres de archivos de imagen

Si por alguna razón desea o necesita hacer esto ejecutando un comando en la Terminal, puede ejecutar el shotwellcomando y pasarle el nombre de archivo de cada imagen como argumento. Globstar lo hace fácil:

shopt -s globstar
shotwell **/*.cr2

Eso abre los .cr2archivos ubicados en cualquier lugar del directorio actual. Se diferencia de ejecutar Shotwell y luego arrastrar la carpeta, ya que Shotwell solo intentará importar los archivos cuyos nombres le asigne. Sin embargo, dado que Shotwell a menudo muestra otros archivos de imagen de las mismas carpetas que los archivos que le ha dicho que abra, esto puede no ser adecuado para sus necesidades. (Y la información adicional que ha brindado sobre su problema sugiere que no es así . Consulte a continuación para obtener una alternativa).

Esto no incluye archivos o subcarpetas cuyos nombres comienzan con. . Sin embargo, si tiene archivos CR2 cuyos nombres comienzan con un punto, entonces la mayoría de las veces probablemente no quiera abrirlos en Shotwell de todos modos. A menos que haya nombrado deliberadamente sus archivos o carpetas de esta manera, es más probable que un archivo de puntos con una extensión de nombre de archivo de imagen o documento sea un archivo de metadatos en lugar de una imagen o documento real. Por ejemplo, macOS a menudo agrega dichos archivos (por ejemplo, ._kittens.cr2para una imagen real kittens.cr2) al acceder a medios externos (incluidas unidades flash y cámaras digitales).

Si también desea encontrar archivos cuyos nombres comiencen .o que estén en carpetas cuyos nombres comiencen. , habilite también dotglob. Puede hacer esto con shopt -s dotglobo pasando ambos globstary dotglobal shoptbuiltin incorporado:

shopt -s globstar dotglob

Por defecto, los globos son sensibles a mayúsculas y minúsculas. Sin embargo, es posible que desee para que coincida con los nombres de archivo mayúsculas y minúsculas , con el fin de abrir archivos que terminan en .cr2, .Cr2, .cR2, y .CR2. Para hacer eso, ya sea:

  • Habilite nocaseglob ejecutándose shopt -scon nocaseglob, solo o con otras opciones de shell. Por ejemplo, para ejecutar shotwellen todos los .cr2archivos, buscando mayúsculas y minúsculas e incluyendo .-files y archivos en .-directorios:

    shopt -s globstar dotglob nocaseglob
    shotwell **/*.cr2
    
  • O , use en .[cC][rR]2lugar de .cr2en su patrón glob mismo. Por ejemplo, esto logra lo mismo que arriba:

    shopt -s globstar dotglob
    shotwell **/*.[cC][rR]2
    

    Tenga en cuenta que la distinción entre mayúsculas y minúsculas está completamente separada de si los .archivos y carpetas coinciden o no . Puede eliminar dotglobde los ejemplos anteriores y aún pueden ser insensibles a mayúsculas y minúsculas.

Para especificar un directorio en lugar de solo usar el directorio actual, coloque su nombre y a /antes del **/*.cr2glob. Por ejemplo, al reemplazar el shotwellcomando anterior con este, se abrirán todos los .cr2archivos dentro del Picturessubdirectorio de su directorio de inicio:

shotwell ~/Pictures/**/*.cr2

A diferencia del primer comando que usa su directorio actual, no importa dónde ejecute ese comando, le indicará a Shotwell que abra los mismos archivos.

Pruebas

Si realmente tiene que usar el terminal para esto, entonces supongo que puede ser parte de algo más complejo. Si lo desea, puede probar dichos comandos antes de ejecutarlos reemplazándolos shotwellcon printf '%s\n'. En lugar de pasar los nombres de archivo a Shotwell, eso los enumera uno por línea. Por ejemplo, en mi 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

Desactivar Globstar y otras opciones de Shell

La opción de shell globstar se ha habilitado para funcionar, que es lo que hizo el shopt -s globstarcomando (arriba). Si ya está habilitado, entonces no necesita múltiples comandos. Y solo necesita establecer globstar una vez por instancia de shell.

Puede volver a desactivar globstar ejecutando:

shopt -u globstar

Y puede verificar si globstar está activado o desactivado ejecutando:

shopt globstar

Si está usando globstar en un script, debería considerar desactivarlo si puede haber código que viene después en el mismo script que no está escrito con globstar en mente. Por ejemplo, escribir **cuando quiere decir *generalmente no es un problema cuando globstar está desactivado, pero con globstar activado, puede causar serios problemas al hacer que un comando afecte muchos más archivos de los que alguien pretendía.

Del mismo modo, si usó dotglob o nocaseglob y también quiere desactivarlos, puede hacerlo con shopt -u dotgloby shopt -u nocaseglob, respectivamente. También puede pasar múltiples opciones de shell a shopt -upara desarmarlas al mismo tiempo. Por ejemplo, para apagar globstar, dotgloby nocaseglob:

shopt -u globstar dotglob nocaseglob

En comparación con globstar, hay menos errores graves que podría cometer porque olvidó que dejó dotglob o nocaseglob activado. Pero otras personas (incluidas las personas que consulta en sitios como Ask Ubuntu) generalmente asumen que dotglob y nocaseglob están deshabilitados cuando sugieren comandos para que use, a menos que usted les indique lo contrario.

Para obtener más información sobre estas opciones de shell relacionadas con glob (y también sobre globs en general ), consulte el manual de referencia de bash . Todos están cubiertos principalmente en 4.3.2 The Shopt Builtin . Para globstar, consulte también 3.5.8.1 Coincidencia de patrones . Para dotglob, consulte también 3.5.8 Expansión de nombre de archivo .


Construyendo un Nuevo Árbol de Directorio

Dado que en su caso parece que realmente necesita Shotwell para mostrar solo .cr2 archivos, no tiene .cr2archivos en las mismas carpetas con .cr2archivos, y la exploración de imágenes en Shotwell también ofrece automáticamente esos archivos , parece que necesitará tener una carpeta que no contiene otros archivos de imagen que los .cr2archivos que está intentando abrir.

Mover los archivos, como ha sugerido , es un enfoque, pero recomiendo copiar los archivos o, mejor, hacer enlaces simbólicos a los archivos (ver también FOLDOC ), porque:

  • Si está moviendo los archivos a través de dispositivos, eso requiere copiar de todos modos, por lo que en ese caso el movimiento no es más rápido.
  • Si tiene espacio, a menudo es una buena idea mantener una carpeta sin modificar de todo lo que comenzó hasta que esté satisfecho de que lo que ha hecho es correcto de acuerdo con sus necesidades. Obviamente, esto no siempre es aplicable o práctico. Pero en su caso, estos archivos son el resultado de una operación de recuperación de datos. Puede ser útil mantener un registro fácil de leer con precisión qué se recuperó y de dónde.
  • Si elige crear enlaces simbólicos, la cantidad de espacio adicional consumido es extremadamente pequeña . (Sin embargo, si el disco de destino está completamente lleno , aún tendrá que liberar espacio en él, o usar un disco de destino diferente, para crear enlaces simbólicos).

También debe tomar otra decisión. ¿Crea todas las entradas nuevas (ya sean copias o enlaces simbólicos) en el mismo directorio, allanando la jerarquía de archivos? ¿O crea directorios en el destino correspondiente a cada uno de los directorios en la fuente que contienen al menos un .cr2archivo?

  • Al acoplar la jerarquía de archivos, puede ver todos los archivos a la vez, fácilmente. En particular, es fácil ver los nombres y tamaños de los archivos a la vez, así como seleccionar cualquier combinación de archivos en un navegador gráfico de archivos.

  • Pero también pierde información sobre en qué carpetas estaban, lo que puede ser valioso (aunque puede volver a la carpeta original y buscarlas allí si no mueve los archivos).

  • Sin embargo, el mayor problema al aplanar la jerarquía de archivos es lo que sucede si tiene dos o más archivos con el mismo nombre en diferentes lugares . Si aplana la jerarquía de archivos, dependiendo de cómo lo haga, no se copiarán (ni vincularán) todos, excepto el primero, y obtendrá un error o advertencia, o todos, excepto la última copia (o enlace) ser sobrescrito .

    Esta es otra razón por la que recomiendo copiar o hacer enlaces simbólicos en lugar de mover archivos. Si "con éxito" mueve varios archivos al mismo archivo, ¡ha perdido todos menos el último!

Debido a las desventajas de aplanar todo en un solo directorio sin subdirectorios, los enfoques que adopto aquí crean un nuevo árbol de directorios en el destino.

Camino 1: Copiar

Lo muestro primero porque es un poco más simple, pero le sugiero que cree enlaces simbólicos ("Camino 2"), especialmente si la unidad de destino podría no tener suficiente espacio para contener todos los archivos. El "Camino 2", que es un poco más complicado, es mucho más detallado porque parece haber menos recursos sobre cómo usar esa técnica, es la forma en que espero que la mayoría de las personas en esta situación prefiera, y la información que se aplica a ambos métodos - se dan consejos básicos sobre cómo escapar de espacios en los caminos - allí en lugar de aquí.

Cuando necesita copiar un árbol de directorios y necesita personalizar la operación de copia, generalmente debe usar en rsynclugar de cp. Este es uno de esos casos.

Reemplazando srccon la ruta al directorio de nivel superior que contiene todos sus archivos CR2, y reemplazando destcon el nombre del directorio que desea crear que contendrá una jerarquía de enlaces simbólicos a los archivos CR2, ejecute:

rsync -rl --prune-empty-dirs --include='*/' --include='*.cr2' --exclude='*' src/ dest

No olvide el /después del nombre del directorio de origen, a menos que desee que se cree un directorio de nivel superior adicional dentrodest . Es decir, si omite el seguimiento /, rsynccreará el directorio de destino en su interior dest. Por ejemplo, supongamos que srces una ruta relativa que contiene no /. Entonces:

  • Con src/su rsynccomando, obtiene un enlace simbólico dest/foo/bar.cr2para el archivo src/foo/bar.cr2.
  • Con srcsu rsynccomando, obtiene un enlace simbólico para el archivo .dest/src/foo/bar.cr2src/foo/bar.cr2

Dado que podría ser confuso para el directorio de nivel superior donde se colocarán enlaces simbólicos para tener el mismo nombre que el del directorio de nivel superior que contiene los .cr2archivos a los que apuntarán los enlaces simbólicos, le recomiendo que incluya el /al final del destino nombre del directorio en su rsynccomando. (Y, para el directorio de origen, dele un directorio que esté vacío, que no exista o que esté dedicado a este propósito. De lo contrario, estará abarrotando alguna otra carpeta).

Como suele ser el caso cuando se pasa el nombre de un archivo o directorio a un programa de línea de comandos o script, si su destino o de origen rutas de directorio contienen espacios en blanco (o caracteres especialmente tratadas por el shell, como \, $, ', y varios otros signos de puntuación), entonces deberá citarlos . He detallado cómo hacer esto, para el caso más común de espacios, en el "Camino 2" - el consejo sobre las citas en esa sección también se aplica aquí. Sin embargo, si no está seguro de cómo citar el nombre de una carpeta, puede hacer que Ubuntu lo haga por usted simplemente arrastrando la carpeta al Temrminal; su ruta completa se pegará con la cita correcta .

Después de copiar solo los .cr2archivos y las carpetas que los contienen, puede abrir la carpeta de destino en Shotwell. (Consulte "Abrir una carpeta de imágenes (incluidas las subcarpetas) en Shotwell" más arriba). Sin embargo, antes de ejecutar rsync, le recomiendo que decida si desea omitir las entradas que comienzan con .y si desea incluir entradas con sufijos con variantes de mayúsculas y minúsculas. Si es así, tendrá que ejecutar un rsynccomando ligeramente diferente .

Personalización del manejo de entradas punteadas y mayúsculas y minúsculas

Es posible que desee utilizar un rsynccomando diferente para cambiar si se omiten o no los archivos y directorios que comienzan con un punto y si desea o no la distinción entre mayúsculas y minúsculas para que coincida con el sufijo .cr2.

El comando anterior hace incluir directorios y archivos cuyos nombres comienzan con .. Para excluir este tipo de archivos y directorios, se puso --exclude='.*/' --exclude='.*'antes de todas las otras --includes y --excludes. Es decir, use este rsynccomando en su lugar (con las sustituciones apropiadas para srcy dest, por supuesto):

rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.cr2' --exclude='*' src/ dest

Los rsynccomandos mostrados hasta ahora han sido mayúsculas y minúsculas y no copiar los archivos que terminan en .CR2, .Cr2o .cR2en lugar de .cr2. Si desea que se copien dichos archivos, deberá tenerlo en cuenta utilizando el --includepatrón *.[cC][rR]2en lugar de *.cr2.

Este tercer comando no distingue entre mayúsculas y minúsculas y (como el primer comando) no omite archivos y directorios cuyos nombres comienzan con .:

rsync -rl --prune-empty-dirs --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest

Si adopta el enfoque de copiar archivos rsyncy no está seguro de cuál de estos comandos desea, le sugiero que use ese si desea asegurarse de no perderse nada. Sin embargo, debe tener en cuenta que los archivos de puntos pueden contener metadatos, y los archivos de puntos nombrados como imágenes pueden no ser realmente imágenes. Vea las discusiones sobre los archivos de puntos en la sección "Lanzamiento de Shotwell con una lista de nombres de archivos de imagen" más arriba, y sobre los archivos de puntos y la distinción entre mayúsculas y minúsculas en la "Forma 2" a continuación.

Esta cuarta comando es sensible a las mayúsculas y (al igual que el segundo comando) hace archivos de salto y directorios cuyos nombres comienzan con .:

rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.[cC][rR]2' --exclude='*' src/ dest

Camino 2: Crear enlaces simbólicos

Esto es lo que te recomiendo que hagas, aunque Way 1 está bien si tienes suficiente espacio en la unidad de destino. No tiene que leer el Camino 1 para usar esto.

El método presentado aquí hace una lista de .cr2archivos y recorre la lista, crea directorios de destino según sea necesario y los completa con enlaces simbólicos a cada .cr2archivo.

Esto es tan complicado que sugiero ponerlo en un script en lugar de escribirlo de forma interactiva. Puede colocar el script donde desee, pero para su comodidad, le mostraré cómo hacerlo con el script ubicado directamente en su carpeta de inicio.

Escriba (o pegue) el guión.

Cree un archivo de texto,, make-symlinksen su carpeta de inicio. No se necesita extensión de archivo.

Puede hacerlo con cualquier editor de texto, como Vim, Nano, Gedit o Leafpad. Sin embargo, no use un procesador de textos como LibreOffice Writer. (Incluso puede hacerlo ejecutando cat > ~/make-symlinks, pegando el contenido del archivo y presionando Ctrl+ Den una nueva línea, si lo desea).

Si le da un nombre diferente al script make-symlinks, asegúrese de usar ese nombre cuando ejecute comandos que usan el script más tarde.

#!/bin/bash

shopt -s globstar dotglob nocaseglob

for f in **/*.cr2; do
    mkdir -p "$1/$(dirname "$f")"
    ln -s "$PWD/$f" "$1/$f"
done

Pon eso en el archivo y guarda el archivo. Este script utiliza globstar, una función Bash explicada anteriormente en "Lanzamiento de Shotwell con una lista de nombres de archivos de imagen" .

Puede cambiar cómo maneja las entradas punteadas y las mayúsculas y minúsculas.

Dependiendo de sus necesidades, es posible que desee realizar algunos cambios:

  • Si no desea incluir .cr2archivos cuyos nombres comienzan con .o que residen en directorios cuyos nombres comienzan con ., elimínelos dotglobde la shoptlínea.

    Los archivos y directorios cuyo nombre comienza con .frecuencia se usan para metadatos (consulte la sección "Iniciar Shotwell con una lista de nombres de archivos de imagen" más arriba). Por otro lado, si quieres asegurarte de que tienes todo, o si hay algo inexplicablemente perdido que estás bastante seguro de que está ahí, entonces debes mantenerlo dotglob.

  • Si desea incluir sólo los archivos que terminan en exactamente .cr2, pero no las variantes de caja ( .CR2, .Cr2y .cR2), entonces usted debe eliminar nocaseglob. Dado que su situación implica la recuperación de datos y Shotwell no le mostrará ninguno de los archivos que perdió cuando abre el directorio de enlaces simbólicos, ese es el punto de este método, después de todo, es probable que desee conservar nocaseglob.

Hazlo ejecutable.

Ejecute este comando para marcar su script ejecutable:

chmod +x ~/make-symlinks

Ejecútelo en el origen y pase el destino como argumento.

Luego cambie el directorio al directorio de origen, es decir, la carpeta de nivel superior que contiene las imágenes. Por ejemplo, si están en el Picturessubdirectorio de su directorio de inicio, debería ejecutar:

cd ~/Pictures

Aquí es donde ejecutará el script. Pase el directorio de destino al script como un argumento de línea de comandos.

Por ejemplo, si desea cr2sque se cree un directorio llamado en su Escritorio para que contenga los enlaces simbólicos, ejecute:

~/make-symlinks ~/Desktop/cr2s

O si solo desea ese directorio directamente en su carpeta de inicio:

~/make-symlinks ~/cr2s

O si tiene una unidad montada en /media/you/MyDrivey desea crear una carpeta llamada linkspara contener los enlaces simbólicos:

~/make-symlinks /media/you/MyDrive/links

Pero si la unidad es /media/you/My Drive(con un espacio), entonces debe usar comillas. Cualquiera de estos trabajos (use solo uno, no los ejecute todos):

~/make-symlinks '/media/you/My Drive/links'
~/make-symlinks /media/you/'My Drive'/links
~/make-symlinks /media/you/My\ Drive/links

Pero si usa ~para su directorio personal, no cite eso:

~/make-symlinks ~/'Two Words'   # good
~/make-symlinks ~/Two\ Words    # good
~/make-symlinks '~/Two Words'   # BAD, because ~ doesn't get expanded

make-symlinkscrea el directorio de destino si aún no existe, así como crea subdirectorios dentro de él. Sin embargo, aún funciona si el destino ya existe.

Incluso puede ejecutarlo varias veces y pasar el mismo directorio de destino (por ejemplo, si lo interrumpió con Ctrl+ C), aunque obtendrá failed to create symbolic linkerrores para los enlaces simbólicos que ya existen, y eso podría ser confuso.

Probablemente no desee pasar el nombre de un directorio que ya existe y contiene archivos no relacionados (como su directorio de inicio) make-symlinks. Si lo hace, puede esperar que se cree un montón de enlaces simbólicos y subcarpetas en él. Probablemente desee utilizar un nuevo directorio, o uno que aún no exista, para make-symlinks.

Importe el árbol de enlaces simbólicos recién creado en Shotwell.

Después de ejecutar make-symlinks, simplemente importe el directorio que le pasó a Shotwell, utilizando cualquiera de los métodos dados en la primera parte de esta respuesta ( "Abrir una carpeta de imágenes (incluidas las subcarpetas) en Shotwell" ). Por ejemplo, puede abrir Shotwell y arrastrar la carpeta.

Dado que todas las entradas en la carpeta son enlaces simbólicos a .cr2archivos o directorios que los contienen, sin ningún otro tipo de archivo, Shotwell no debería ver ninguno de los otros archivos.


5

Shotwell recorrerá todas las imágenes que se encuentran en cada directorio donde está abierta una imagen, por lo que usarlo find -name '*.cr2' -exec shotwell '{}' +como sugerí originalmente no ayuda realmente. Dado que la configuración de Shotwell es bastante limitada, la única forma en que puedo pensar en abrir solo los archivos que desea es mover los archivos a un nuevo directorio por sí mismos.

Puedes usar findpara eso:

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

Reemplace cpcon mvsi desea evitar crear archivos duplicados.

Notas:

  • mkdir ~/cr2files hacer un nuevo directorio en su directorio de inicio
  • find buscar recursivamente desde el directorio actual hacia abajo a través del árbol
  • -type f buscar solo archivos
  • -iname buscar archivos por nombre, ignorando mayúsculas y minúsculas
  • '*.cr2'nombres que terminan en .cr2- use comillas para detener el shell expandiendo el globo antes de que pasefind
  • -not -path './dir/*'excluirá el contenido del directorio dirde los resultados
  • {} representa las rutas de los archivos encontrados
  • --después cpes decirle que cpno acepte más opciones, lo que evita que cualquier nombre de archivo que comience a -causar problemas

Luego puede abrir cualquier archivo en el nuevo directorio con Shotwell y recorrerlos todos


¿Por qué esto también abre archivos .jpg y .png en el directorio? Veo que especifica * .cr2? ¿Cómo consigo que solo vea los archivos .cr2 cuando presiono la flecha izquierda en shotwell? Si uso un \ en lugar de un +, no sucede nada :(
user285884

¡Oh! esto es un problema @ user285884 Lo siento, shotwell recorre todas las imágenes que encuentra en el directorio ... déjame ver si puedo encontrar una forma de
evitarlo

@ user285884 editado, pero no puedo encontrar una solución elegante :(
Zanna

1
ok, gracias por el esfuerzo! ¿Qué pasa con esto? Busco en el directorio archivos .cr2 y los muevo a una carpeta separada llamada cr2files. Lo hice dentro de una subcarpeta usando mv * .cr2 ../cr2files/ y funcionó. Sin embargo, ¿cómo hago esto y especifico qué archivos buscar? Algo así como "oye Linux, mira las carpetas 1-10 para archivos .cr2 y muévelo a la carpeta cr2files". Gracias Zanna
usuario285884

1
bueno para algún contexto sobre donde estoy. Perdí algunas fotos. Así que hice un fotorec y me dio una gran cantidad de carpetas, suficientes para llenar todo mi disco duro. Por lo tanto, quiero buscar en todas las carpetas de mi disco duro, excepto una, porque esa tiene una tonelada de archivos .cr2 que sé que no son los que estoy buscando. Entonces quiero que Linux revise todas las carpetas excepto una. No estoy seguro de que tu código haga eso. ¿Que es lo que hace? También el "-" después de -v? Gracias zanna!
user285884

1

Opción 1: uso xargscuando los nombres de archivo contienen espacios

Como los comentarios a continuación han señalado, el uso back ticks(Opción 3 a continuación) se interrumpirá cuando los nombres de archivo contengan espacios. El método más seguro de usar el findcomando y pasar la salida al shotwelluso de la xargsopción se ve así:

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

La -print0bandera le dice a \0delimitadores encontrar ( usar caracteres nulos) entre los nombres de archivo, y la -0bandera le dice xargsque espere estos \0delimitadores.

Acredite las excelentes respuestas que se encuentran aquí ( Cómo canalizar la lista de archivos devueltos por el comando find ) en Stack Overflow.

Opción 2: uso -execcuando los nombres de archivo contienen espacios

Como señala un comentario a continuación, la -execopción también admite nombres de archivos que contienen espacios. Otros comentarios a continuación señalan que esto se rompe cuando la cantidad de archivos excede. Esto se vería así:

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

Opción 3: cuando los nombres de archivo no tienen espacios

En los viejos tiempos, antes de que los nombres de los archivos tuvieran espacios y tuvieran 256 caracteres, esta opción funcionaba bien. Encontrará esta opción mencionada en muchos otros sitios web, pero no debe usar esta opción . En el findpasado , usar el comando y pasar la salida a shotwellera el método más simple:

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

Esto comienza finddesde el directorio actual e incluye todos los subdirectorios:

  • Tenga en cuenta el uso de back ticky no comillas simples 'arriba. Usar back-ticks es similar a incluir una frase $(...)dentro de bash.
  • El primer argumento .da findun punto de partida que es el directorio actual. Podrías pasar /home/$USER/Pictureso algo más en lugar de ..
  • El segundo argumento -namele dice a find que busque nombres de archivo (no directorios).
  • Esta técnica funciona para todos los comandos, no solo shotwell. Es decir, puede usarlo para cat, head, taily la mayoría de los comandos Linux más populares.

Usar los backticks está mal visto, además tiene problemas con la división de palabras. Recomiendo que lo cambie a pipe con xargs y use -0todos los nombres de archivo use una cadena NULL como separador
Sergiy Kolodyazhnyy

El problema con el enfoque en esta respuesta es que hace lo incorrecto cuando cualquiera de los nombres de archivo, o cualquier nombre de directorio que contenga los archivos, tiene espacios. Tenga en cuenta que, aunque muchas personas prefieren la $( )sintaxis de sustitución de comandos a la sintaxis de sustitución de comandos de retroceso, eso no es relevante para este problema: ambos fallan exactamente de la misma manera. @Serg Sugiero publicar una nueva respuesta sobre cómo hacerlo xargs. (Poner la sustitución " "tampoco funcionaría: todos los findresultados se aprobarían como un solo argumento).
Eliah Kagan

También vi la xargsopción Stack Overflowal escribir esta respuesta. También ampliaré con esa opción. Desafortunadamente, tuve que arrancar con Windows 8 esta mañana para reparar la NTFSpartición corrupta, por lo que las pruebas fueron problemáticas. Sin embargo, actualizaré la respuesta más tarde. Gracias por señalarlo :)
WinEunuuchs2Unix

¿Por qué no solo usar -exec?
Zanna

@Zanna también agregaré la -execopción :)
WinEunuuchs2Unix

-2

No sabía que Shotwell incluso abrió archivos en bruto. Estoy seguro de que puede obtener más kilometraje con digikam o darktable. Digikam viene con algunos componentes de Kde y es un administrador de fotos bastante bueno. Darktable viene con muy buenas capacidades de edición no destructivas.


¿Puede expandir esta respuesta ( editando ) para incluir información detallada sobre cómo usar Digikam (u Darktable) para examinar solo .cr2archivos en una carpeta? Si es así, esto podría ser valioso, ya que el póster original ha tenido problemas para que Shotwell muestre solo los .cr2archivos. Aunque he agregado enfoques adicionales a mi respuesta para hacer posible usar Shotwell para explorar solo esos archivos y no otros, sospecho que Shotwell no es la mejor herramienta para esto.
Eliah Kagan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.