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 .cr2
archivos 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 .cr2
archivos 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 .cr2
archivos, 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 .cr2
archivos, pero si está abriendo archivos de múltiples subcarpetas que contienen .cr2
imágenes creadas desde una cámara digital, lo más probable es que sean los únicos archivos presentes.
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.
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.
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 shotwell
comando y pasarle el nombre de archivo de cada imagen como argumento. Globstar lo hace fácil:
shopt -s globstar
shotwell **/*.cr2
Eso abre los .cr2
archivos 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.cr2
para 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 dotglob
o pasando ambos globstar
y dotglob
al shopt
builtin 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 -s
con nocaseglob
, solo o con otras opciones de shell. Por ejemplo, para ejecutar shotwell
en todos los .cr2
archivos, 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]2
lugar de .cr2
en 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 dotglob
de 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 **/*.cr2
glob. Por ejemplo, al reemplazar el shotwell
comando anterior con este, se abrirán todos los .cr2
archivos dentro del Pictures
subdirectorio 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 shotwell
con 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 globstar
comando (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 dotglob
y shopt -u nocaseglob
, respectivamente. También puede pasar múltiples opciones de shell a shopt -u
para desarmarlas al mismo tiempo. Por ejemplo, para apagar globstar,
dotglob
y 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 .cr2
archivos en las mismas carpetas con .cr2
archivos, 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 .cr2
archivos 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 .cr2
archivo?
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 rsync
lugar de cp
. Este es uno de esos casos.
Reemplazando src
con la ruta al directorio de nivel superior que contiene todos sus archivos CR2, y reemplazando dest
con 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 /
, rsync
creará el directorio de destino en su interior dest
. Por ejemplo, supongamos que src
es una ruta relativa que contiene no /
. Entonces:
- Con
src/
su rsync
comando, obtiene un enlace simbólico dest/foo/bar.cr2
para el archivo src/foo/bar.cr2
.
- Con
src
su rsync
comando, obtiene un enlace simbólico para el archivo .dest/src/foo/bar.cr2
src/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 .cr2
archivos a los que apuntarán los enlaces simbólicos, le recomiendo que incluya el /
al final del destino nombre del directorio en su rsync
comando. (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 .cr2
archivos 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 rsync
comando ligeramente diferente .
Personalización del manejo de entradas punteadas y mayúsculas y minúsculas
Es posible que desee utilizar un rsync
comando 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 --include
s y --exclude
s. Es decir, use este rsync
comando en su lugar (con las sustituciones apropiadas para src
y dest
, por supuesto):
rsync -rl --prune-empty-dirs --exclude='.*/' --exclude='.*' --include='*/' --include='*.cr2' --exclude='*' src/ dest
Los rsync
comandos mostrados hasta ahora han sido mayúsculas y minúsculas y no copiar los archivos que terminan en .CR2
, .Cr2
o .cR2
en lugar de .cr2
. Si desea que se copien dichos archivos, deberá tenerlo en cuenta utilizando el --include
patrón *.[cC][rR]2
en 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 rsync
y 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 .cr2
archivos y recorre la lista, crea directorios de destino según sea necesario y los completa con enlaces simbólicos a cada .cr2
archivo.
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-symlinks
en 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 .cr2
archivos cuyos nombres comienzan con .
o que residen en directorios cuyos nombres comienzan con .
, elimínelos dotglob
de la shopt
lí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
, .Cr2
y .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 Pictures
subdirectorio 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 cr2s
que 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/MyDrive
y desea crear una carpeta llamada links
para 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-symlinks
crea 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 link
errores 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 .cr2
archivos o directorios que los contienen, sin ningún otro tipo de archivo, Shotwell no debería ver ninguno de los otros archivos.