Sposta automaticamente i file in una cartella principale + elimina sottocartella

2

Sto cercando di capire come spostare automaticamente i file da una cartella alla cartella principale ed eliminare la cartella originale. Per illustrare, ecco la mia struttura:

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

Voglio spostare tutti i miei file .avi in Parent Folder e eliminare Subfolder del tutto ( Subfolder non sarà ancora vuoto dopo aver spostato questi file, ma voglio eliminarlo e il suo avanzo contenuti).

Ho giocato con Hazel, ma credo che la mia logica non sia la migliore e non riesco a capirlo. È possibile con Hazel o Automator o entrambi?

Grazie in anticipo!

    
posta Jusi 19.10.2013 - 14:41
fonte

1 risposta

1

La seguente soluzione sposta tutti (e solo) i file ".avi" all'interno delle sottocartelle (un livello in profondità) nella cartella padre ed elimina le sottocartelle. Potrebbe non essere la soluzione ottimale dal momento che ci sono molti modi diversi in cui gli script di shell possono essere scritti per risolvere un problema.

Presupposti e restrizioni:

  1. Verranno spostati solo i file ".avi". Altri file saranno ignorati e cancellati senza preavviso.
  2. Lo script (aggiornato) funziona solo su tre livelli sotto la cartella principale. Se ci sono sottocartelle all'interno delle sottocartelle contenenti i file ".avi", saranno cancellati come qualsiasi altro file (inclusi quelli ".avi").
  3. Questo script può gestire file ".avi" che hanno spazi nel nome del file.

Attenzione: Utilizza uno script di shell che sposta i file ed elimina completamente directory / file. Avere un backup prima di tentare di usarlo (anche piccoli cambiamenti nello script possono causare problemi gravi e irrecuperabili). Non c'è modo di recuperare da eventuali problemi tranne il ripristino da un backup.

Soluzione:

  • In Hazel, imposta un orologio per la cartella principale nel riquadro Cartelle a sinistra.
  • Aggiungi una regola facendo clic sul pulsante "+" e nominala come desideri.
  • Imposta i criteri delle condizioni come segue

    If <any> of the following conditions are met for <any of its sub-files or folders>
    
    <Any File>
    
  • Imposta Effettua quanto segue nel file o nella cartella corrispondente: come segue

    <Run shell script> <embedded script>
    
  • Fai clic sul pulsante Modifica script accanto al menu a discesa.
  • Lascia l'opzione Shell: al valore predefinito ( '/bin/sh ).
  • Nella casella di testo sottostante, copia e incolla questo script di shell (ho incluso i commenti che iniziano con # - sono solo per renderlo facile da capire o modificare)

    # 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
    ' {} ';'
    
risposta data 19.10.2013 - 16:46
fonte

Leggi altre domande sui tag