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 *
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"
Supondo que você esteja usando o shell bash (o caso mais comum), você pode usar o símbolo de negação globbing (expansão do nome do caminho):
Isso usa globbing estendido, portanto, você deve habilitar isso primeiro:
fonte
fonte
fonte
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
fonte
Para uma recursiva,
rm
você precisará fazer a recursãofind
e excluir os arquivos que deseja manter (ougrep
, 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,zsh
hasrm **/*~foo/bar
- note que é provável que isso ocorra dentro dos limites de tamanho do argumento para grandes árvores de diretório).fonte