2014-11-13 11 views
8

Ich habe viele RAR-Archive in einzelnen Ordnern strukturiert und möchte Skript entpacken sie alle.Dateien finden und Befehl ausführen

Ich habe Probleme herauszufinden, wie es gemacht werden soll und brauche Hilfe.

#!/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 

Ich bin nicht vertraut mit Bash Scripting und ich nehme an, der Code ist mehr als einmal falsch. Aber ich denke, das ist die Grundstruktur sein sollte

Antwort

12

Sie können mit den find Befehl:

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

find bietet die Möglichkeit exec, die diesen Befehl für jede Datei ausgeführt wird, die gefunden wurde.

+0

'finden', in der Art, wie ich es gepostet habe, wird * verhindern * Sie von zu vielen offenen Dateifehlern. Ich nehme an, du hast etwas wie 'find foo * ...' gemacht, was bedeutet, dass du einen Glob für den Verzeichnisnamen benutzt hast (oder etwas anderes, das mir nicht bekannt ist). Fühlen Sie sich frei, eine Frage zu Ihrem speziellen Problem zu stellen. Lassen Sie den Link zu der Frage hier los und ich werde mich dort umsehen. – hek2mgl

+0

Das Problem ist offensichtlich das 'für i in 'ls/var/cpanel/users /';'. Es sollte sein "für i in/var/cpanel/users/*' – hek2mgl

+0

@Luka Das Problem ist das '" * .jpg "' - das ist nicht notiert, schau es dir an. Es wird auf alle JPG-Dateien in diesem Ordner erweitert, die diesen Fehler auslösen. Der Befehl, nach dem Sie suchen, lautet: 'for i in/var/cpanel/users/*; tu sudo -H -u "$ i" finde "/ home/$ i/public_html" -type f -name '* .jpg' -execdir jpegoptim {} \; ; done' – hek2mgl

5

Sie benötigen kein Skript.

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

Darüber hinaus können Sie die Ergebnisse finden unrar Befehl übergeben.

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