2014-11-13 15 views
8

Ho un sacco di archivi rar strutturati in singole cartelle e vorrei script di decomprimere tutti.Trova i file ed esegui il comando

Ho difficoltà a capire come dovrebbe essere fatto e ho bisogno di aiuto.

#!/bin/bash 
## For all inodes 
for i in pwd; do 
    ## If it's a directory 
    if [ -d "$i" ] then 
     cd $i 

     ## Find ".rar" file 
     for [f in *.rar]; do 
      ./bin/unrar x "$f" # Run unrar command on filename 
      cd .. 
     done 
    done 
done 

Non ho familiarità con lo scripting di bash e presumo che il codice sia sbagliato più di una volta. Ma credo che questo dovrebbe essere la struttura di base

risposta

12

È possibile utilizzare il comando find:

find -name '*.rar' -exec unrar x {} \; 

find offre la possibilità exec che eseguirà il comando su ogni file che è stato trovato.

+0

'find', nel modo in cui l'ho pubblicato, * impedirà * di troppi errori di file aperti. Immagino che tu abbia fatto qualcosa come "find foo * ...", nel senso che hai usato un glob per il nome della directory (o qualcos'altro di cui non sono a conoscenza). Sentiti libero di fare una domanda sul tuo particolare problema. Lascia il link alla domanda qui e ti darò un'occhiata. – hek2mgl

+0

Il problema è ovviamente 'per i in 'ls/var/cpanel/users /';'. Dovrebbe essere 'per i in/var/cpanel/users/*' – hek2mgl

+0

@Luka Il problema è il '" * .jpg "' - che non è quotato, guardalo. Si espanderà a tutti i file jpg in quella cartella che fa scattare quell'errore. Il comando che stai cercando è: 'for i in/var/cpanel/users/*; do sudo -H -u "$ i" trova "/ home/$ i/public_html" -tipo f -name '* .jpg' -execdir jpegoptim {} \; ; done' – hek2mgl

5

Non è necessario uno script.

find . -name "*.rar" -exec unrar x {} \; 

Inoltre, potreste passare i risultati di trovare per unrar comando.

find . -name "*.rar" | xargs unrar x