Come creare un servizio di Automator per eseguire uno script su tutti i file in una cartella

2

Voglio creare un servizio utilizzando Automator per eseguire uno script di shell su tutti i file in una cartella, ad esempio cancella tutti i file di registro. Quello che ho fatto è

  1. Creato un nuovo servizio in automator.
  2. Aggiunta un'azione "Esegui script shell". Ho cambiato questo per 'pwd' per ora.
  3. Selezionato "Il servizio riceve le cartelle selezionate".
  4. Ho cercato di eseguirlo, ma ho ricevuto un messaggio. "Per testare questo servizio all'interno di Automator, aggiungere l'azione" Trova elementi specifici del Finder "all'inizio del flusso di lavoro: rimuovere o disabilitare l'azione prima di eseguire il flusso di lavoro all'esterno di Automator.
  5. OK. Quindi aggiungo "Ottieni elementi specifici del Finder". Aggiunta una directory 'test' all'elenco di elementi.

Ora, quando eseguo lo script, la finestra dei risultati stampa la mia directory home.

Altrove, ho letto che forse devo aggiungere

cd "$1"

all'inizio del mio script. L'ho fatto ma stampa ancora la mia home directory. Come faccio a ottenere questa cosa per stampare la directory che ho selezionato in "Trova elementi specifici del Finder?"

Modificato per aggiungere

Ecco una schermata di uno script che funziona.

Eccounoscreenshotdiunoscriptchenonfunziona.

Ilsolitomododitrattarel'errore"nessuna corrispondenza trovata: * .log" sarebbe di reindirizzare l'output dell'errore su null. Sostituire la riga "rm" di

find . -name "*.log" -print0 | xargs -0 rm -rf

Funziona comunque. Questo sembra più difficile di quanto dovrebbe essere.

    
posta pheon 23.03.2016 - 21:58
fonte

1 risposta

2

Se stai creando un servizio utilizzando Script RunShell per il quale desideri passare le cartelle selezionate a Script RunShell e azioni aggiuntive si svolgono nello script su di essi, quindi inizia con queste impostazioni.

Crea il servizio:

  1. Apri Automator e seleziona Servizio o File > Nuovo > Servizio se Automator è già aperto.

  2. Imposta Il servizio riceve selezionato in cartelle e in in Finder .

  3. Aggiungi un Esegui script di shell Azione , impostazione Shell: a / bin / bash e Passa l'input: a
    come argomenti . Cambia il codice predefinito da cat a:

    for f in "$@"
    do
        echo "$f"
    done
    

Ora puoi utilizzare $f per agire sulla cartella (e) di destinazione , ad es. cd $f e ora sei nella directory di $f e puoi aggiungere ulteriore codice per agire sui file / cartelle in $f , ecc.

Aggiornamento:

Utilizza il seguente codice di lavoro come esempio:

for d in "$@"; do
    cd "$d"
    for f in *.log; do    
        rm "$f"
    done
done

Nelle cartelle Test e Copia di prova c'erano un certo numero di file .log e file con altre estensioni. Quando è stato eseguito il codice precedente, ha eliminato solo i file *. Log all'interno delle cartelle di destinazione come mostrato nelle immagini sottostanti utilizzando due cartelle o una cartella e entrambi i file e le cartelle con / senza spazi nei loro nomi.

    
risposta data 23.03.2016 - 22:51
fonte

Leggi altre domande sui tag