2013-09-23 7 views
5

Ich versuche, Dateien in einem Verzeichnis mit rm zu entfernen und ohne das Verzeichnis selbst in einem Skript zu löschen. Die Beispiele, die ich sehe, tun dies nur im Verzeichnis selbst, und ich möchte es tun, ohne dort zu navigieren.Bash Wildcard Verwendung

Ich versuchte

rm "$(dirname $1)/filetokeep/*" 

aber es funktioniert nicht. Irgendeine Hilfe?

+0

Warum 'dirname $ 1'? – user567879

+0

Eine .sln-Datei wird mit dem gleichen Namen wie ihr Verzeichnis übergeben – user2805565

Antwort

6

Das Angeben des Platzhalters verhindert die Expansion.

rm -- "$(dirname -- "$1")/filetokeep"/* 

Mit -- stellt sicher, dass Werte nicht als optionale Argumente interpretiert werden und nicht als Positions diejenigen (so, dass die Dinge noch arbeiten, wenn das Verzeichnis mit einem - in $1 beginnt genannt).

+0

Danke, ich bin neu zu bash. Ich habe eine Menge Zeug probiert, es sieht so aus, als würde ich Zitate übertreiben. Das Entfernen der Anführungszeichen bei meinem ursprünglichen Versuch funktioniert auch. – user2805565

+0

@ user2805565 Durch das Entfernen der Anführungszeichen werden Fehler verursacht. Sie wollen sie nur vom letzten Zeichen entfernen. –

+1

... eigentlich sollte 'rm" $ (dirname "$ 1")/filetokeep "/ *' vollständig korrekt sein (innere Anführungszeichen um '$ 1' -' $() 'erzeugt einen neuen Zitatkontext, also funktioniert das wirklich wie angegeben). –