215 votos

todos los archivos excepto algunos RM

Cuando se utiliza sudo rm -r , ¿cómo puedo borrar todos los archivos, con la excepción de los siguientes:

textfile.txt
backup.tar.gz
script.php
database.sql
info.txt

219voto

awi Puntos 741
find [path] -type f -not -name 'EXPR' | xargs rm

por ejemplo, eliminar todo no-archivos txt en el directorio actual:

find . -type f -not -name '*txt' | xargs rm

El "hallazgo | xargs"combinación es realmente útil.

findtambién lista directorios, que puede que no desee.

151voto

pl1nk Puntos 485
rm !(textfile.txt|backup.tar.gz|script.php|database.sql|info.txt)

El extglob (Extended Pattern Matching) debe estar habilitado en BASH (si no está habilitada):

shopt -s extglob

41voto

darioo Puntos 23903

find . | grep -v "excluded files criteria" | xargs rm

Esto mostrará una lista de todos los archivos en el directorio actual, a continuación, una lista de todos aquellos que no coinciden con sus criterios (tenga cuidado de que la coincidencia de los nombres de directorio) y, a continuación, eliminarlos.

Actualización: se basa en la edición, si usted realmente desea eliminar todo el directorio actual, excepto los archivos que se enumeran, esta puede ser:

mkdir /tmp_backup && mv textfile.txt backup.tar.gz script.php database.sql info.txt /tmp_backup/ && rm -r && mv /tmp_backup/* . && rmdir /tmp_backup

Se creará una copia de seguridad del directorio /tmp_backup (tienes privilegios de root, verdad?), mover los archivos que se enumeran a ese directorio, borrar recursivamente todo en el directorio actual (usted sabe que usted está en el directorio correcto, no?), volver a directorio actual de todo, desde /tmp_backup y, finalmente, eliminar /tmp_backup.

Puedo elegir el directorio de copia de seguridad para estar en la raíz, porque si usted está tratando de eliminar todo de forma recursiva desde la raíz, el sistema tendrá grandes problemas.

Seguro que hay más elegantes maneras de hacer esto, pero esta es bastante sencillo.

20voto

Dennis Williamson Puntos 105818

Suponiendo que existen archivos con los nombres en varios lugares en el árbol de directorios y desea conservar todas ellas:

find . -type f ! -regex ".*/\(textfile.txt\|backup.tar.gz\|script.php\|database.sql\|info.txt\)" -delete

19voto

theharshest Puntos 1790

Puede usar la variable de entorno GLOBIGNORE en Bash.

Supongamos que desea eliminar todos los archivos excepto php y sql, entonces puedes hacer el siguiente:

export GLOBIGNORE=*.php:*.sql
rm *
export GLOBIGNORE=

Establecer GLOBIGNORE como esto ignora php y sql de comodines usados como "ls *" o "rm *". Así, usando "rm *" después de que la variable se eliminará sólo archivo txt y tar.gz.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X