Possível duplicado:
Como excluir todos os arquivos em um diretório, exceto alguns?
Como excluir todos os arquivos, exceto um (ou alguns) no Unix?
Algo como
rm -rf -ignore myfile.txt *
Possível duplicado:
Como excluir todos os arquivos em um diretório, exceto alguns?
Como excluir todos os arquivos, exceto um (ou alguns) no Unix?
Algo como
rm -rf -ignore myfile.txt *
Respostas:
ls * | grep -v dont_delete_this_file | xargs rm -rf
Exemplo:
mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5
Para remover todos os arquivos, exceto 'test2':
ls * | grep -v test2 | xargs rm -rf
Então a saída 'ls' é:
test2
EDITAR:
Obrigado pelo comentário. Se o diretório contiver alguns arquivos com espaços:
mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"
Você pode usar (com bash):
rm !("test 1"|"test 4")
Saída 'ls':
test 1
test 4
ls -1 | grep -v do_not_delete | xargs -I files rm "files"
Esta página oferece uma variedade de opções, dependendo do shell: http://www.unix.com/unix-dummies-questions-answers/51400-how-remove-all-except-one-file.html
Para uma recursiva, rmvocê precisará fazer a recursão finde excluir os arquivos que deseja manter (ou grep, mas isso pode causar problemas em espaço em branco). Para um shell glob, os shells modernos têm padrões glob que podem ser usados para excluir arquivos; isso pode ser combinado com a recursão glob no nível do shell, quando disponível (por exemplo, zshhas rm **/*~foo/bar- note que é provável que isso ocorra dentro dos limites de tamanho do argumento para grandes árvores de diretório).