3 votos

Cómo puedo scribir mover los archivos un nivel de directorio con Terminal (o la hoja de trabajo BBEdit)

Al exportar desde Photos.app con la configuración que conserva la estructura de álbumes y carpetas, cada carpeta de álbumes contiene carpetas con fecha para cada fecha representada en ese álbum, con las imágenes reales dentro de ellas. Un ejemplo de exportación para esta pregunta da esta estructura...

Export/
    Colour/
        11 November 2005/
            img_0440.jpg
        13 November 2005/
            pb130006_1_1.jpg
    Life/
        Creatures/
            12 November 2005/
                img_0453.jpg
        People/
            9 November 2005/
                img_0174.jpg
            10 November 2005/
                img_0181.jpg
            14 November 2005/
                pb140009.jpg
        Plants/
            10 November 2005/
                img_0404.jpg
                img_0408.jpg
            13 November 2005/
                img_0477.jpg
            14 November 2005/
                img_0625.jpg

¿Qué puedo ejecutar en el Terminal para recorrer el contenido de Export y mover todos los archivos encontrados un nivel de directorio hacia arriba?

El resultado deseado en mi ejemplo sería...

Export/
    Colour/
        img_0440.jpg
        pb130006_1_1.jpg
    Life/
        Creatures/
            img_0453.jpg
        People/
            img_0174.jpg
            img_0181.jpg
            pb140009.jpg
        Plants/
            img_0404.jpg
            img_0408.jpg
            img_0477.jpg
            img_0625.jpg

Una solución que funciona en bash porque hago muchas de mis cosas de CL en BBEdit que es bash solamente, o fish porque ese es mi shell preferido en Terminal, sería preferible, pero trabajaré con otros shells.

3voto

Mark Puntos 6

Esto no se ha probado: eliminar el echo si se ve bien:

find ./Export -name '*.jpg' -print0 |
  xargs -0 sh -c 'for file; do echo mv "$file" "${file%/*}"/..; done' sh

La extraña cola sh es necesario porque se establece como $0 en el cuerpo de la shell, de modo que el resto de los argumentos introducidos por xargs puedan ser fácilmente iterados.

Esto dejará los directorios vacíos. Para listar los directorios vacíos:

find . -type d -empty -print

Para eliminar los directorios vacíos:

find . -type d -empty -print -delete

Para no depender de la extensión del archivo:

find ./Export -type f -print0 |
  xargs -0 sh -c '
    for file; do
      case "$(file "$file")" in
        *"JPEG image data"*) echo mv "$file" "${file%/*}"/..;;
      esac
    done
  ' sh

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X