Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero
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 comandormen 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.