Removendo todos os arquivos, exceto 1 e 1 diretório no Linux

Removendo todos os arquivos, exceto 1 e 1 diretório no Linux

Quero excluir todos, exceto 1 arquivo e 1 diretório, do diretório em que estou atualmente.

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

Responder1

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

Um rápido caso de teste mostrou que funcionou exatamente neste caso, pelo menos. Se houver subdiretórios nomeados por exemplo cou algo assim, acredito que você também poderá excluí-los. É fácil fazê-lo funcionar em casos gerais, mas definir um comando find em geral requer alguns testes.

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

PRESSTOP: findmuda seu comportamento quando -deleteé especificado ( findavisa sobre isso e não continua quando -pruneé especificado). Você sempre pode canalizar a saída para xargsand 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 um negócio complicado e, quando o objetivo é excluir arquivos, faça testes extensos. Tenho alguns findprogramas semelhantes rodando todas as noites e não posso dizer que não fiquei nervoso em liberá-los :-)

Responder2

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

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

Responder3

Experimente o seguinte script em 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 {
}
}

informação relacionada