2010-11-30 4 views
6

Hey Leute, ich habe Probleme mit der Übergabe der Variablen an% exe Teil des Codes. Brauche deine Hilfe.Wie übergebe ich Variablen innerhalb von find und bash -c?

Hier ist meine Arbeits Code, den ich innerhalb Bash-Skript verwenden:

## Function 
targz() { 
    find $1 -type f -name "*.$2" -exec \ 
    bash -c 'old=$(basename {}); new=${old/%exe/tar\.gz}; \ 
     tar -zcvf $new $old; ' \; 
} 

## Function Call 
## targz [directory] [extension] 
targz . 'exe'; 

und ja, ich habe versucht, es etwas, was wie folgt aus:

new=${old/%$2/tar\.gz}; 

aber es erzeugt Dateinamen wie: Datei .exetar.gz

Antwort

5

Versuchen:

targz() { 
    find $1 -type f -name "*.$2" -exec \ 
    bash -c 'old=$(basename {}); new=${old/'"$2"'/tar\.gz}; \ 
     tar -zcvf $new $old; ' \; 
} 

Der Trick ist, aus dem einzigen Angebot zu erhalten, so dass variable Expansion wird durchgeführt werden.

+0

Danke Darron, genau das habe ich gebraucht. – EMC

4

Verwenden env eine Umgebungsvariable für bash einzustellen:

012.
targz() { 
    find "$1" -type f -name "*.$2" -exec \ 
    env ext="$2" bash -c 'old=$(basename "{}"); new=${old/%$ext/tar\.gz}; \ 
     tar -zcvf "$new" "$old"; ' \; 
} 

Ich habe einige Zitate zum Schutz vor Leerzeichen in Dateinamen hinzugefügt.

+0

Vielen Dank Dennis, ich habe die Anführungszeichen um {} – EMC

+0

Nice angewendet; Es lohnt sich auch, $ 1 und $ 2 zu dotieren. – mklement0

+1

@ mklement0: Fertig. Vielen Dank. –

Verwandte Themen