Removendo todos, exceto 1 arquivo e 1 diretório no linux

2

Desejo excluir todos os arquivos, exceto 1, e 1 diretório do diretório em que estou atualmente. Como faço para isso?

Eu tenho um diretório que tem três diretórios a, b, ce três arquivos 1.php, 2.php, 3.php. Eu quero remover os diretórios aeb, assim como os arquivos 1.php e 2.php apenas. Eu estou procurando uma solução para fazer isso de uma maneira mais fácil. Estou procurando uma solução que possa ser usada em uma escala maior com mais pastas e arquivos.

    
por sniper 26.07.2011 / 22:46

3 respostas

3

find directory -not \( -name temp -o -name 3.php -o -name c -prune \) -delete

Um caso de teste rápido mostrou que funcionou exatamente nesse caso. Se houver subdiretentes chamados, e. c ou algo assim, acredito que você possa excluí-los também. É fácil fazê-lo funcionar em casos gerais, mas definir um comando de localização em toda generalidade requer alguns testes.

Teste sem a instrução "-delete" para ver quais arquivos correspondem.

PRESSTOP: find altera seu comportamento quando -delete é especificado ( find avisa sobre isso e não funciona quando -prune é especificado). Você sempre pode canalizar a saída para xargs e rm ou escrever -execdir rm {} \; em vez de -delete .

Exemplos:

find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -execdir rm -r {} \;
find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -print0 | xargs -0 rm -r

É sempre complicado, e quando o objetivo é excluir arquivos, faça testes extensos. Eu tenho alguns find s semelhantes correndo todas as noites, e eu não posso dizer que eu não estava nervoso em liberá-los: -)

    
por 27.07.2011 / 00:48
1

Meu instinto é este: se você tiver apenas um arquivo para salvar e um diretório, copie-os para um lugar seguro e depois tire o resto.

cp /dir/file.txt /safe/dir/
cp -R /dir/to/save /safe/dir/
rm -rf /dir/

    
por 26.07.2011 / 23:10
1

Experimente o seguinte script no pseudo perl:

#request the file you don't want to delete and store the name in a scalar variable.

opendir(DIRHANDLE, ".") || die "Could not open Directory handle.";
@list = readdir(DIRHANDLE);

foreach $name (@list) {
if($name != $your_input_variable) {
unlink($name);
} else {
}
}

    
por 26.07.2011 / 23:06