Apagar todos os arquivos, exceto alguns no bash, sem cd para o diretório?

2

Eu preciso fazer uma limpeza diária em um diretório de download.

Eu vi esta questão e testei a resposta

rm !("test 1"|"test 4")

Funciona muito bem, mas precisa ter o cd no diretório antes. Já que meu aplicativo precisa ser duas direcionalmente mais alto em muitas partes, eu gostaria de não fazer algo como

cd /app/download
rm !("test 1"|"test 4")
cd ../..

Eu tentei

rm !("./app/download/test 1"|"./app/download/test 4")

Mas, bem, exclua o conteúdo do diretório superior, não faça o download /

    
por DrakaSAN 19.09.2013 / 10:18

1 resposta

2

Você estava quase lá:

shopt -s extglob   # ← Only needed if you haven't enabled it yet
rm ./app/download/!("test 1"|"test 4")

O !(…) será expandido com o caminho completo para todos os arquivos, exceto os que estão em !(…) . Como você prefixar os argumentos para rm com o caminho ./app/download/ , nenhum outro arquivo superior a esse diretório será excluído.

    
por 19.09.2013 / 10:24