En Linux, el comando rm
no tiene una opción directa para excluir archivos o directorios específicos mientras elimina otros. Sin embargo, puedes lograr este comportamiento usando otros comandos de Unix, como find
o combinando el uso de comodines con el operador de exclusión. Aquí te explico cómo hacerlo:
1. Excluir archivos al eliminar usando find
El comando find
es muy útil para realizar búsquedas avanzadas y puedes combinarlo con rm
para excluir ciertos archivos o directorios al eliminar.
Sintaxis básica:
find . -name "patrón_de_archivo" ! -name "archivo_a_excluir" -exec rm {} \;
-name "patrón_de_archivo"
: Busca archivos que coincidan con un patrón.! -name "archivo_a_excluir"
: Excluye archivos con el nombre que especifiques.-exec rm {} \;
: Ejecuta el comandorm
en los archivos encontrados.
Ejemplo:
Imagina que tienes varios archivos con la extensión .log
y quieres eliminar todos, excepto uno llamado important.log
.
find . -name "*.log" ! -name "important.log" -exec rm {} \;
Esto eliminará todos los archivos con extensión .log
en el directorio actual y subdirectorios, pero no eliminará el archivo important.log
.
2. Excluir varios archivos al eliminar
Si necesitas excluir varios archivos, puedes usar más de una condición ! -name
para especificar múltiples exclusiones.
Ejemplo:
Si quieres eliminar todos los archivos .log
excepto important.log
y backup.log
:
find . -name "*.log" ! -name "important.log" ! -name "backup.log" -exec rm {} \;
Este comando elimina todos los archivos .log
, excepto los que hayas excluido.
3. Excluir directorios al eliminar
Si deseas eliminar archivos y subdirectorios dentro de un directorio, pero excluir algunos directorios, también puedes usar find
para este propósito.
Ejemplo:
Supongamos que quieres eliminar todos los archivos y directorios en el directorio proyecto
, excepto el directorio backup
:
find proyecto/* ! -path "proyecto/backup*" -exec rm -rf {} \;
Este comando eliminará todo lo que esté dentro de proyecto
, excepto el contenido del directorio backup
.
4. Usar un bucle for
para excluir archivos al eliminar
Otra opción es usar un bucle for
en combinación con el comando rm
. Este método es más manual pero puede ser útil en ciertos casos.
Ejemplo:
Eliminar todos los archivos .txt
excepto uno llamado not_delete.txt
:
for file in *.txt; do
if [[ "$file" != "not_delete.txt" ]]; then
rm "$file"
fi
done
Este bucle recorrerá todos los archivos .txt
en el directorio actual y eliminará todos menos el archivo not_delete.txt
.
5. Combinar rsync
con rm
para excluir archivos
Otra opción más avanzada es usar rsync
con su opción --exclude
, que permite excluir archivos o directorios específicos. Luego, puedes eliminar solo lo que se ha sincronizado.
Ejemplo:
rsync -av --exclude='important.log' --exclude='backup.log' ./ /tmp/temp_dir/ && rm -rf /tmp/temp_dir/*
En este ejemplo, rsync
copiará todos los archivos y carpetas, excepto los excluidos, a un directorio temporal, y luego puedes eliminar el contenido de ese directorio temporal.
Conclusión
Para excluir archivos o directorios específicos al usar rm
, la combinación con comandos como find
o bucles de shell te da un control avanzado sobre qué eliminar y qué no. Aunque rm
no tiene una opción directa para exclusiones, estas estrategias te permiten lograr ese comportamiento de manera eficaz.