2013-09-23 11 views
5

Próbuję usunąć pliki z katalogu przy użyciu rm i bez usuwania samego katalogu w skrypcie. Przykłady, które widzę, robią to tylko w samym katalogu i chciałbym to zrobić bez nawigacji.Użyj znaku wieloznacznego Bash

Próbowałem

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

ale to nie działa. Jakaś pomoc?

+0

Dlaczego 'dirname $ 1'? – user567879

+0

Plik .sln jest przekazywany z tą samą nazwą, co jego katalog – user2805565

Odpowiedz

6

Cytowanie wieloznacznika hamuje ekspansję.

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

Korzystanie -- zapewnia, że ​​wartości nie mogą być interpretowane jako opcjonalne argumenty niż te pozycyjne (tak, że wszystko nadal działa, jeśli katalog wymieniony w $1 rozpoczyna się -).

+0

Dzięki, jestem nowy w bash. Próbowałem kilku rzeczy, wygląda na to, że zbyt często używam cytatów. Usunięcie cytatów z mojej pierwotnej próby również działa. – user2805565

+0

@ user2805565 Usunięcie kwotowań bezpośrednio spowoduje błędy; chcesz tylko usunąć ich z ostatniej postaci. –

+1

... faktycznie, powinno być "rm" $ (dirname "$ 1")/filetokeep "/ *", aby być w pełni poprawne (wewnętrzne cytaty wokół '$ 1' -' $() 'tworzą nowy kontekst cytowania, więc to naprawdę działa tak, jak podano). –

Powiązane problemy