Mover archivos automáticamente a una carpeta principal + eliminar subcarpeta

2

Estoy tratando de averiguar cómo mover automáticamente los archivos de una carpeta a su carpeta principal y eliminar la carpeta original. Para ilustrar, aquí está mi estructura:

Parent Folder
    – Subfolder
            – File.avi
            - File2.avi
            - Otherfile.trash

Quiero mover todos mis archivos .avi al Parent Folder y deshacerme de Subfolder por completo ( Subfolder aún no estará vacío después de mover estos archivos, pero quiero eliminarlos y sus restos) contenidos).

He estado jugando con Hazel pero creo que mi lógica no es la mejor y no puedo entenderlo. ¿Es posible con Hazel o Automator o ambos?

Gracias de antemano!

    
pregunta Jusi 19.10.2013 - 14:41

1 respuesta

1

La siguiente solución moverá todos (y solo) los archivos ".avi" dentro de las subcarpetas (un nivel de profundidad) a la carpeta principal y eliminará las subcarpetas. Puede que no sea la solución más óptima, ya que hay muchas maneras diferentes en que se pueden escribir los scripts de shell para resolver un problema.

Suposiciones y restricciones:

  1. Sólo se moverán los archivos ".avi". Otros archivos serán ignorados y eliminados sin previo aviso.
  2. El script (actualizado) funciona solo tres niveles debajo de la carpeta principal. Si hay subcarpetas dentro de las subcarpetas que contienen archivos ".avi", se eliminarán como cualquier otro archivo (incluidos esos archivos ".avi").
  3. Este script puede manejar archivos ".avi" que tienen espacios en el nombre del archivo.

Precaución: Esto usa un script de shell que mueve archivos y elimina directorios / archivos completamente. Tenga una copia de seguridad antes de intentar usarla (incluso cambios menores en el script pueden causar problemas serios e irrecuperables). No hay forma de recuperarse de ningún problema, excepto para restaurar desde una copia de seguridad.

Solución:

  • En Hazel, configura un reloj para la carpeta principal en el panel Carpetas de la izquierda.
  • Agregue una regla haciendo clic en el botón "+" y asígnele el nombre que desee.
  • Establezca los criterios de condiciones de la siguiente manera

    If <any> of the following conditions are met for <any of its sub-files or folders>
    
    <Any File>
    
  • Establezca Haga lo siguiente en el archivo o carpeta coincidente: de la siguiente manera

    <Run shell script> <embedded script>
    
  • Haz clic en el botón Editar secuencia de comandos al lado del menú desplegable.
  • Deje la opción Shell: al valor predeterminado ( '/bin/sh ).
  • En el cuadro de texto a continuación, copie y pegue este script de shell (he incluido comentarios que comienzan con #; son solo para facilitar su comprensión o modificación)

    # Get the directory name and go into it - this should be the parent directory
    dir='dirname $1'
    cd $dir
    
    # Find all directories one level below
    # For each subdirectory, move all ".avi" files to its parent directory,
    # then remove the subdirectory and its contents (change avi to any other extension if necessary)
    find . ! -path . -type d -maxdepth 1 -exec sh -c '
    dir="$0"
    mv $dir/*/*/*.avi $dir/..
    rm -rf $dir
    ' {} ';'
    
respondido por el M K 19.10.2013 - 16:46

Lea otras preguntas en las etiquetas