2016-07-26 25 views
0

Wie können Sie mit einem Platzhalter und einer Variablen viele Dateien löschen? Dies ist meine Variable "$dir"Wann sollten Wildcards innerhalb/außerhalb von Anführungszeichen stehen?

$ echo "$dir" 
/home/path/to/file 

Hier habe ich die Wild Card in den doppelten Anführungszeichen, aber es funktioniert nicht:

$ rm "$dir/data/ffg_per_product/ffg*" 
rm: cannot remove `/home/path/to/file/data/ffg_per_product/ffg*': No such file or directory 

Hier habe ich die Wildcard außerhalb der doppelten Anführungszeichen und es funktioniert:

$ rm "$dir/data/ffg_per_product/ffg"* 

Und hier können Sie die Dateien sehen gelöscht wurden:

$ ls -lth ffg_per_product/ffg* | wc -l 
ls: cannot access ffg_per_product/ffg*: No such file or directory 
0 

Also, was ich wissen möchte, ist ich die Anführungszeichen korrekt verwenden, um die Dateien zu löschen rm "$dir/data/ffg_per_product/ffg"* mit dem Platzhalter outise die Anführungszeichen? Oder gibt es einen anderen/besseren Weg?

HINWEIS: wahrscheinlich einige offensichtlich, aber nur für refererence und klar zu sein, das gleiche gilt für ls z.B. ls "$dir/data/ffg_per_product/NAME"* | wc -l, muss der Platzhalter außerhalb der Anführungszeichen stehen.

+0

Verwandte, mit viel mehr Kontext in den Antworten; http://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-variable – tripleee

Antwort

3

Ein * außerhalb von Anführungszeichen wird durch die Shell zu übereinstimmenden Dateinamen erweitert.

Ein * in Anführungszeichen ist nicht erweitert, es wird buchstäblich verwendet, nur eine einfache *.

Das ist richtig und entspricht Ihre Absicht:

rm "$dir/data/ffg_per_product/ffg"* 

Das gleiche auch mit dem ls Befehl für Ihr weiteres Beispiel geht genau die gleiche Argumentation.