2013-09-23 12 views
5

Sto cercando di rimuovere i file in una directory utilizzando rm e senza eliminare la directory stessa in uno script. Gli esempi che vedo lo fanno solo nella directory stessa, e mi piacerebbe farlo senza navigare lì.Bash Wildcard utilizzare

ho cercato

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

ma non funziona. Qualsiasi aiuto?

+0

Perché 'dirname $ 1'? – user567879

+0

un file .sln viene passato con lo stesso nome della sua directory – user2805565

risposta

6

Il richiamo del carattere jolly impedisce l'espansione.

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

Utilizzando -- assicura che i valori non possono essere interpretate come argomenti opzionali piuttosto che quelli posizionali (in modo che le cose funzionano ancora se la directory chiamato in $1 inizia con un -).

+0

Grazie, sono nuovo di bash. Stavo provando un sacco di cose, sembra che sto sfruttando le citazioni. Anche la rimozione delle virgolette sul mio tentativo originale funziona. – user2805565

+0

@ user2805565 La rimozione definitiva delle virgolette causerà errori; vuoi solo toglierli dall'ultimo personaggio. –

+1

... in realtà, dovrebbe essere 'rm" $ (dirname "$ 1")/filetokeep "/ *' per essere completamente corretto (virgolette interne attorno a '$ 1' -' $() 'crea un nuovo contesto di quotatura, quindi funziona davvero come dato). –

Problemi correlati