2 votos

Automatizar la organización de archivos en carpetas basadas en el principio del nombre de archivo?

Busca disponer rápidamente de una carga completa (hablando de varios miles) de archivos en las subcarpetas y los archivos que vienen en grupos de tres (audio izquierda, a la derecha de audio, video) archivos separados. No tiene experiencia en la terminal, pero realmente metido en Automator antes.

Ejemplo:

00015_A01.mxf
00015_A02.mxf
00015.mxf
00016_A01.mxf
00016_A02.mxf
00016.mxf

Quiero automatizarlo para que el Finder busca los archivos con la coincidencia de la primera personajes, y los coloca en una sub carpeta (de preferencia con el nombre de ese archivo, pero he conseguido una solución para eso.)

Así, el resultado sería:

[00015] (folder)
00015_A01.mxf
00015_A02.mxf
00015.mxf

[00016] (folder)
00016_A01.mxf
00016_A02.mxf
00016.mxf

Alguna idea? He comprobado todo aquí, pero las respuestas fueron un poco por encima de mi cabeza...

2voto

john Puntos 11
for i in {10..99}
do
    mkdir 000$i
    mv 000$i* 000$i
done

for i in {100..999}
do
    mkdir 00$i
    mv 00$i* 00$i
done

for i in {1000..9999}
do
    mkdir 0$i
    mv 0$i* 0$i
done

Este script de bash que debe trabajar para 10-9999 directorios.

2voto

slm Puntos 118

La siguiente secuencia de comandos se ocupará de construir nuevos directorios como sea necesario y sólo mover de nuevo los archivos que aparecen dentro de un directorio dado, en sus respectivos subdirectorios, es decir. 0015, 0016, etc.

$ cat mover.sh
#!/bin/bash

find . -type f -name "*.mxf" -depth 1 -exec sh -c '
    file="${1/\.\//}"
    echo "$file"
    dir=${file/[_.]*mxf/}
    [ -d "$dir" ] || mkdir -p $dir
    mv $file $dir/.
' find-sh {} \;

Con lo anterior en un archivo llamado mover.sh y este archivo sea ejecutable a través del comando chmod +x mover.sh podemos, a continuación, ejecute como esta, ./mover.sh.

Ejemplo

Aquí tenemos el siguiente directorio donde algunos subdirectorios ya existen y que contienen sus respectivos archivos.

$ tree .
.
├── 0015.mxf
├── 0015_A01.mxf
├── 0015_A02.mxf
├── 0016.mxf
├── 0016_A01.mxf
├── 0016_A02.mxf
├── 0017
│   ├── 0017.mxf
│   ├── 0017_A01.mxf
│   └── 0017_A02.mxf
├── 0018
│   ├── 0018.mxf
│   ├── 0018_A01.mxf
│   └── 0018_A02.mxf
└── mover.sh

Ahora habíamos cd ~/somedir donde *.mxf archivos que necesitan para tener todo organizado se encuentran y ejecutar el ./mover.sh script.

$ ./mover.sh
0015_A02.mxf
0015_A01.mxf
0016_A01.mxf
0016_A02.mxf
0015.mxf
0016.mxf

Así que nuestro script se ha identificado los archivos anteriores y confirmó que su subdirectorio existe y nuestro script se muevan (mv)*.mxf a sus respectivos subdirectorios. Aquí podemos ver el estado de el directorio donde el *.archivos mxf reside después de ejecutar la secuencia de comandos:

$ tree
.
├── 0015
│   ├── 0015.mxf
│   ├── 0015_A01.mxf
│   └── 0015_A02.mxf
├── 0016
│   ├── 0016.mxf
│   ├── 0016_A01.mxf
│   └── 0016_A02.mxf
├── 0017
│   ├── 0017.mxf
│   ├── 0017_A01.mxf
│   └── 0017_A02.mxf
├── 0018
│   ├── 0018.mxf
│   ├── 0018_A01.mxf
│   └── 0018_A02.mxf
└── mover.sh

4 directories, 13 files

Cómo funciona

El script hace uso de una herramienta de UNIX llamado find para producir una lista de los archivos que coinciden con el patrón *.mxf. Esta lista, a continuación, reiteró a través de una serie de comandos se ejecutan en cada archivo encontrado:

  • file="${1/\.\//}" - toma a cada nombre de archivo y elimina ./ que es el prefijo para cada uno de los nombres find
  • echo "$file" - mostrar los resultados de este comando a la pantalla
  • dir=${file/[_.]*mxf/} - eliminar cualquier trailing caracteres que coinciden con los patrones de _*.mxf o *.mxf
  • [ -d "$dir" ] || mkdir -p $dir - comprobar si el directorio de los archivos va a existe, si no lo hace
  • mv $file $dir/. - mover este archivo en el directorio correspondiente

Ejecuta periódicamente esta

Una idea aquí sería la instalación de un cronjob que se ejecuta periódicamente en macOS para ejecutar esta secuencia de comandos. Usted puede leer más acerca de cómo realizar esta aquí en este tutorial titulado: planificar los trabajos con crontab en Mac OS X.

Los pasos básicos aquí son como sigue:

  • Crear una entrada crontab

    $ env EDITOR=nano crontab -e
    
  • Agregar una entrada especificando en qué secuencia de comandos a ejecutar y cuando (cada 5 minutos)

    0/5 * * * *  cd ~/my/mxf/folder && ./mover.sh
    
  • Confirmar los cambios

    $ crontab -l
    

0voto

Como de Mac OS 10.14.4 no he sido capaz de encontrar dicha función, pero que pueden mantenga pulsada la tecla comando (tecla de windows si utiliza un teclado de windows), haga clic con dos dedos en el trackpad o haga clic a la izquierda y dice "Nueva Carpeta con la Selección".

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