Manipulación de Archivos y Directorios
Manipulación de Archivos y Directorios
Introducción
Más allá de navegar y buscar, necesitas crear, copiar, mover y eliminar archivos. Estos comandos son las herramientas básicas para la administración de archivos en el sistema.
🗺️ En este tema aprenderás:
- Comando
cp- copiar archivos y directorios - Comando
mv- mover y renombrar - Comando
rm- eliminar archivos - Comando
rmdir- eliminar directorios - Comando
mkdir- crear directorios - Comando
touch- crear archivos vacíos - Comando
ln- crear enlaces - Buenas prácticas de seguridad
El Comando mkdir - Crear Directorios
El comando mkdir (make directory) crea nuevos directorios.
Sintaxis:
BASH
mkdir [opciones] [directorio(s)]Opciones principales:
-p: Crear directorios padres si es necesario-m: Establecer permisos al crear
💡 Ejemplos Prácticos Multi-SO
Linux
BASH
$ mkdir Documentos
$ ls -d Documentos
Documentos- 1
- Crea un directorio en la ubicación actual
macOS
BASH
$ mkdir Documents
$ ls -d Documents
Documents- 1
- Funciona igual que Linux
Windows
POWERSHELL
PS> mkdir Documents
PS> Get-Item Documents
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 29/1/2024 10:30 Documents- 1
-
mkdires un alias deNew-Item -ItemType Directory
Ejemplo 2: Crear estructura de directorios anidados (-p)
BASH
$ mkdir -p ~/Proyectos/Python/web-app/src
$ tree ~/Proyectos
Proyectos/
└── Python/
└── web-app/
└── src/- 1
-
-pcrea todos los directorios intermedios
BASH
$ mkdir -p ~/Projects/Python/web-app/src- 1
- Funciona igual
POWERSHELL
PS> mkdir -Path C:\Users\usuario\Projects\Python\web-app\src -Force
# El -Force es equivalente a -p- 1
-
PowerShell requiere
-Forcepara crear padres
Ejemplo 3: Crear directorio con permisos específicos (-m)
BASH
$ mkdir -m 700 privado
$ ls -ld privado
drwx------ 1 usuario usuario 4096 Jan 29 10:30 privado- 1
-
-m 700establece permisos solo-propietario
BASH
$ mkdir -m 700 privado- 1
- Funciona igual
POWERSHELL
# Windows no soporta -m, pero puedes hacerlo después:
PS> mkdir privado
PS> # No hay equivalente directo en PowerShell- 1
- Los permisos de Windows funciona diferente (NTFS ACLs)
El Comando touch - Crear Archivos Vacíos
El comando touch crea archivos vacíos o actualiza la marca de tiempo de archivos existentes.
Sintaxis:
BASH
touch [opciones] [archivo(s)]💡 Ejemplos Prácticos Multi-SO
Linux
BASH
$ touch README.md
$ ls -l README.md
-rw-r--r-- 1 usuario grupo 0 Jan 29 10:30 README.md- 1
- Crea un archivo vacío de 0 bytes
macOS
BASH
$ touch README.md
$ ls -l README.md
-rw-r--r-- 1 usuario staff 0 Jan 29 10:30 README.md- 1
- Funciona igual
Windows
POWERSHELL
# No existe touch, pero:
PS> New-Item -Path C:\Users\usuario -Name README.md -ItemType File
# o en WSL:
PS> wsl touch README.md- 1
-
PowerShell usa
New-Item
Ejemplo 2: Actualizar marca de tiempo de archivo existente
BASH
$ ls -l archivo.txt
-rw-r--r-- 1 usuario grupo 1024 Jan 25 10:00 archivo.txt
$ touch archivo.txt
$ ls -l archivo.txt
-rw-r--r-- 1 usuario grupo 1024 Jan 29 10:30 archivo.txt- 1
- Actualiza el timestamp sin modificar contenido
BASH
$ touch archivo.txt- 1
- Funciona igual
POWERSHELL
PS> (Get-Item archivo.txt).LastWriteTime = Get-Date- 1
- PowerShell actualiza la fecha manualmente
El Comando cp - Copiar Archivos y Directorios
El comando cp (copy) copia archivos y directorios.
Sintaxis:
BASH
cp [opciones] [origen] [destino]Opciones principales:
-ro-R: Copiar recursivamente (directorios)-i: Preguntar antes de sobrescribir-v: Modo verboso (mostrar progreso)-p: Preservar permisos y timestamps
💡 Ejemplos Prácticos Multi-SO
Linux
BASH
$ cp archivo.txt archivo-copia.txt
$ ls -l archivo*
-rw-r--r-- 1 usuario grupo 1024 Jan 29 10:30 archivo-copia.txt
-rw-r--r-- 1 usuario grupo 1024 Jan 25 10:00 archivo.txt- 1
- Crea una copia exacta del archivo
macOS
BASH
$ cp archivo.txt archivo-copia.txt- 1
- Funciona igual
Windows
POWERSHELL
PS> Copy-Item archivo.txt archivo-copia.txt
# o
PS> cp archivo.txt archivo-copia.txt- 1
-
cpes un alias deCopy-Item
Ejemplo 2: Copiar a un directorio diferente
BASH
$ cp archivo.txt ~/Documentos/
$ ls ~/Documentos/archivo.txt
/home/usuario/Documentos/archivo.txt- 1
- Si el destino es un directorio, copia el archivo dentro
BASH
$ cp archivo.txt ~/Documents/- 1
- Funciona igual
POWERSHELL
PS> Copy-Item archivo.txt C:\Users\usuario\Documents\- 1
- Igual funcionalidad
Ejemplo 3: Copiar directorios recursivamente (-r)
BASH
$ cp -r Proyectos Proyectos-copia
$ ls -ld Proyectos*
drwxr-xr-x 5 usuario grupo 4096 Jan 29 10:30 Proyectos
drwxr-xr-x 5 usuario grupo 4096 Jan 29 10:30 Proyectos-copia- 1
-
-rcopia recursivamente todo el directorio
BASH
$ cp -r Proyectos Proyectos-copia- 1
- Funciona igual
POWERSHELL
PS> Copy-Item -Path Proyectos -Destination Proyectos-copia -Recurse- 1
-
-Recursees el equivalente a-r
Ejemplo 4: Copiar con confirmación (-i) y preservación de atributos (-p)
BASH
$ cp -ip archivo.txt archivo-copia.txt
cp: overwrite 'archivo-copia.txt'? y
$ ls -l archivo-copia.txt
-rw-r--r-- 1 usuario grupo 1024 Jan 25 10:00 archivo-copia.txt
1- 1
-
-ipregunta antes de sobrescribir - 2
-
-ppreserva permisos y timestamps originales
BASH
$ cp -ip archivo.txt archivo-copia.txt- 1
- Funciona igual
POWERSHELL
PS> Copy-Item archivo.txt archivo-copia.txt -Confirm- 1
- PowerShell no preserva permisos igual (usa NTFS ACLs)
El Comando mv - Mover y Renombrar
El comando mv (move) mueve o renombra archivos y directorios.
Sintaxis:
BASH
mv [opciones] [origen] [destino]💡 Ejemplos Prácticos Multi-SO
Linux
BASH
$ mv archivo-viejo.txt archivo-nuevo.txt
$ ls archivo*
archivo-nuevo.txt- 1
- Renombra el archivo (mismo directorio)
macOS
BASH
$ mv archivo-viejo.txt archivo-nuevo.txt- 1
- Funciona igual
Windows
POWERSHELL
PS> Rename-Item archivo-viejo.txt archivo-nuevo.txt
# o
PS> mv archivo-viejo.txt archivo-nuevo.txt- 1
-
mves un alias deMove-Item
Ejemplo 2: Mover archivo a otro directorio
BASH
$ mv archivo.txt ~/Documentos/
$ ls ~/Documentos/archivo.txt
/home/usuario/Documentos/archivo.txt- 1
- Mueve el archivo, no copia
BASH
$ mv archivo.txt ~/Documents/- 1
- Funciona igual
POWERSHELL
PS> Move-Item archivo.txt C:\Users\usuario\Documents\- 1
- Funciona igual
Ejemplo 3: Mover y renombrar simultáneamente
BASH
$ mv archivo.txt ~/Documentos/archivo-nuevo.txt- 1
- Mueve y renombra en una operación
BASH
$ mv archivo.txt ~/Documents/archivo-nuevo.txt- 1
- Funciona igual
POWERSHELL
PS> Move-Item archivo.txt C:\Users\usuario\Documents\archivo-nuevo.txt- 1
- Mismo comportamiento
El Comando rm - Eliminar Archivos
El comando rm (remove) elimina archivos. ADVERTENCIA: No hay “papelera de reciclaje” - es permanente.
Sintaxis:
BASH
rm [opciones] [archivo(s)]Opciones principales:
-i: Preguntar antes de eliminar (seguro)-f: Forzar sin preguntar (peligroso)-r: Recursivo (eliminar directorios)-v: Verboso (mostrar qué se elimina)
💡 Ejemplos Prácticos Multi-SO
Linux
BASH
$ rm -i archivo.txt
remove archivo.txt? y
1- 1
-
-ipregunta antes de eliminar - 2
-
Siempre usa
-ihasta que te sientas seguro
macOS
BASH
$ rm -i archivo.txt
remove archivo.txt? y- 1
- Funciona igual
Windows
POWERSHELL
PS> Remove-Item archivo.txt -Confirm- 1
-
-Confirmpregunta antes de eliminar
Ejemplo 2: Eliminar sin preguntar (peligroso)
BASH
$ rm archivo.txt
# Sin confirmación, archivo eliminado para siempre- 1
- PELIGRO: No hay forma de recuperar
BASH
$ rm archivo.txt- 1
- Funcionamiento idéntico
POWERSHELL
PS> Remove-Item archivo.txt -Force- 1
-
-Forceelimina sin preguntar
Ejemplo 3: Eliminar directorios recursivamente (-r)
BASH
$ rm -ri directorio
remove directorio? y
remove directorio/archivo1.txt? y
remove directorio/archivo2.txt? y
1- 1
-
-relimina recursivamente - 2
-
-ipregunta para cada archivo
BASH
$ rm -ri directorio- 1
- Funciona igual
POWERSHELL
PS> Remove-Item -Path directorio -Recurse -Confirm- 1
-
-Recurseelimina directorios y contenido
El Comando rmdir - Eliminar Directorios Vacíos
El comando rmdir solo elimina directorios vacíos, es más seguro que rm -r.
Sintaxis:
BASH
rmdir [directorio]💡 Ejemplos Prácticos Multi-SO
Linux
BASH
$ rmdir directorio-vacio
$ ls directorio-vacio
ls: cannot access 'directorio-vacio': No such file or directory- 1
- Solo funciona si está completamente vacío
macOS
BASH
$ rmdir directorio-vacio- 1
- Funciona igual
Windows
POWERSHELL
PS> Remove-Item -Path directorio-vacio -Confirm- 1
- Funciona igual
El Comando ln - Crear Enlaces
El comando ln (link) crea enlaces entre archivos. Existen dos tipos:
Enlaces simbólicos (soft links):
- Apuntan a otro archivo por nombre
- Pueden cruzar sistemas de archivos
- Se rompen si el archivo original se elimina
Enlaces duros (hard links):
- Apuntan directamente al contenido del archivo
- No pueden cruzar sistemas de archivos
- Persisten aunque se elimine el original
💡 Ejemplos Prácticos Multi-SO
Linux
BASH
$ ln -s archivo.txt enlace.txt
$ ls -l enlace.txt
lrwxrwxrwx 1 usuario grupo 10 Jan 29 10:30 enlace.txt -> archivo.txt
1- 1
-
-screa enlace simbólico - 2
-
La
lal inicio indica que es enlace
macOS
BASH
$ ln -s archivo.txt enlace.txt- 1
- Funciona igual
Windows
POWERSHELL
# En WSL:
PS> wsl ln -s archivo.txt enlace.txt
# En PowerShell (Windows 10+):
PS> New-Item -ItemType SymbolicLink -Path enlace.txt -Target archivo.txt- 1
- PowerShell requiere permisos de administrador
Ejemplo 2: Crear enlace duro (sin -s)
BASH
$ ln archivo.txt enlace-duro.txt
$ ls -i archivo.txt enlace-duro.txt
123456 archivo.txt
123456 enlace-duro.txt
1- 1
-
Sin
-s, crea enlace duro - 2
- Ambos tienen el mismo inodo (123456)
BASH
$ ln archivo.txt enlace-duro.txt- 1
- Funciona igual
POWERSHELL
# No soporta hard links igual que Unix
# En WSL:
PS> wsl ln archivo.txt enlace-duro.txt- 1
- NTFS tiene junctions que son similares
Resumen de Manipulación de Archivos
| Comando | Propósito | Ejemplo |
|---|---|---|
mkdir -p dir/subdir |
Crear directorios | mkdir -p ~/Proyectos/web |
touch archivo.txt |
Crear archivo vacío | touch README.md |
cp archivo.txt copia.txt |
Copiar archivo | cp config.txt config.bak |
cp -r dir dir-copia |
Copiar directorio | cp -r src src-backup |
mv archivo.txt nuevo.txt |
Renombrar | mv archivo.txt LEEME.txt |
mv archivo.txt dir/ |
Mover | mv archivo.txt ~/Documentos/ |
rm archivo.txt |
Eliminar archivo | rm archivo.txt |
rm -r directorio |
Eliminar directorio | rm -r directorio/ |
rmdir dir-vacio |
Eliminar dir vacío | rmdir dir-vacio |
ln -s archivo enlace |
Enlace simbólico | ln -s config config.link |
Mejores Prácticas de Seguridad
Siempre usa
-iconrmhasta que tengas experienciaBASH
rm -i archivo.txt # Pregunta antes de eliminarHaz copias antes de operaciones peligrosas
BASH
cp archivo.txt archivo.txt.backup # ... hacer cambios ...Usa
rsyncpara copias importantesBASH
rsync -av origen/ destino/Verifica antes de eliminar recursivamente
BASH
ls -lR directorio/ # Ver contenido primero rm -ri directorio # Luego eliminarUsa control de versiones para código
BASH
git commit -m "Backup antes de cambios" # ... hacer cambios ...
🎯 Ejercicios Prácticos
Crea estructura:
Proyecto/src/mainusandomkdir -pCrea 3 archivos vacíos con
touchCopia un archivo con
cpy verifica conlsRenombra archivo con
mvCrea enlace simbólico con
ln -sElimina archivos con
rm -i(seguro)Elimina directorio vacío con
rmdir
Referencias
Para más información sobre manipulación de archivos:
- (IEEE 2018) - POSIX File Operations
- (Foundation 2023) - GNU Bash Manual
- (Project 2024) - GNU Coreutils Manual