lección 3
Crear, mover, copiar y borrar archivos
Domina las operaciones fundamentales con archivos y carpetas desde la terminal: crear, copiar, mover, renombrar y eliminar.
⏱ 50 min
Ya sabes moverte por tu ordenador sin ratón. Ahora viene el siguiente paso: aprender a manipular archivos y carpetas directamente desde la terminal. Crear carpetas, crear archivos vacíos, copiarlos, moverlos, renombrarlos y eliminarlos. Son las operaciones que harás miles de veces en tu carrera — y la terminal las hace más rápidas y precisas que cualquier interfaz gráfica.
Piénsalo así: hasta ahora eras un turista que recorría la ciudad mirando edificios. Hoy te conviertes en arquitecto: vas a construir, demoler y reorganizar. Y aquí es donde la terminal brilla de verdad, porque en un solo comando puedes hacer cosas que con el ratón requerirían docenas de clicks.
### mkdir — crear carpetas
El comando mkdir (make directory) crea una carpeta nueva. Es el equivalente a hacer click derecho → "Nueva carpeta" en tu explorador de archivos, pero más rápido y preciso. Funciona igual en ambos sistemas:
1# Funciona igual en 🟦 PowerShell y 🍎 Mac Terminal:2mkdir mi-proyecto34# Crear carpeta dentro de otra carpeta:5mkdir mi-proyecto/datos67# Crear toda una estructura de golpe (carpetas anidadas):8# 🍎 Mac:9mkdir -p mi-proyecto/datos/raw10# 🟦 PowerShell:11mkdir mi-proyecto/datos/raw12# (PowerShell crea las carpetas intermedias automáticamente)
mkdir = "make directory". Crea carpetas al instante.
En Mac necesitas la opción -p para crear carpetas anidadas que no existen aún (por ejemplo, si "datos" no existe y quieres crear "raw" dentro). PowerShell es más permisivo: crea las carpetas intermedias automáticamente sin necesidad de opciones extra.
Y si te toca trabajar con una carpeta que ya tiene espacios en el nombre — porque la creó otra persona o tu sistema la tiene así — ponla entre comillas simples: cd 'mis datos de enero'. O escribe las primeras letras y pulsa Tab, que se encarga solo. La convención profesional sigue siendo guiones (datos-enero), pero el mundo real no siempre coopera.
### Crear archivos vacíos
¿Para qué querrías crear un archivo vacío? Es más útil de lo que parece. Muchos proyectos de programación necesitan archivos de configuración, archivos README, archivos .gitignore... A veces solo necesitas que el archivo exista para que otra herramienta lo reconozca. Aquí es donde los sistemas difieren:
1# 🍎 Mac Terminal:2touch notas.txt # Crea un archivo vacío3touch datos.csv readme.md # Crea varios a la vez45# 🟦 Windows PowerShell:6New-Item notas.txt # Crea un archivo vacío7New-Item datos.csv, readme.md # Crea varios a la vez8# Atajo más corto:9ni notas.txt # ni = alias de New-Item
touch (Mac) y New-Item (PowerShell) crean archivos vacíos.
Consejo de senior: en el mundo real, la primera cosa que hago al empezar un proyecto nuevo es abrir la terminal y escribir: mkdir mi-proyecto && cd mi-proyecto. Luego creo los archivos base. Este flujo se vuelve automático con la práctica — como poner la primera piedra de un edificio.
### Escribir contenido en archivos desde la terminal
Crear archivos vacíos está bien, pero ¿y si quieres poner algo dentro sin abrir un editor? Puedes redirigir texto a un archivo directamente:
1# 🍎 Mac Terminal:2echo "Hola mundo" > saludo.txt # Crea archivo con ese contenido3echo "Segunda línea" >> saludo.txt # AÑADE al final (no sobreescribe)4cat saludo.txt # Muestra el contenido del archivo56# 🟦 Windows PowerShell:7echo "Hola mundo" > saludo.txt # Crea archivo con ese contenido8echo "Segunda línea" >> saludo.txt # AÑADE al final (no sobreescribe)9Get-Content saludo.txt # Muestra el contenido del archivo10# También funciona: type saludo.txt
> crea/sobreescribe, >> añade al final. cat/Get-Content para leer.
¡Cuidado con > vs >>! Un solo > SOBREESCRIBE el archivo completo — si tenía contenido previo, lo perderás. Dos >> AÑADE al final sin borrar nada. Es un error clásico que todo el mundo comete al menos una vez. Si alguna vez pierdes contenido, ya sabes qué pasó.
### cp — copiar archivos y carpetas
Copiar es como fotocopiar: el original se queda donde está y se crea una copia en el destino. Es la operación más segura porque no pierdes nada. En Linux todos estos comandos funcionan igual que en Mac — si usas WSL o una máquina Linux, esta lección te vale tal cual.
1# 🍎 Mac Terminal:2cp archivo.txt copia.txt # Copiar archivo3cp archivo.txt otra-carpeta/ # Copiar a otra carpeta4cp -r mi-carpeta/ backup/ # Copiar carpeta ENTERA (-r = recursivo)56# 🟦 Windows PowerShell:7Copy-Item archivo.txt copia.txt # Copiar archivo8Copy-Item archivo.txt otra-carpeta/ # Copiar a otra carpeta9Copy-Item mi-carpeta/ backup/ -Recurse # Copiar carpeta entera10# Atajo: cp también funciona como alias en PowerShell11cp archivo.txt copia.txt # Funciona igual
cp (Mac) / Copy-Item (PowerShell). Para carpetas, usa -r (Mac) o -Recurse (PowerShell).
Ni cp ni mv preguntan nada si el destino ya existe. Lo machacan y devuelven éxito. Si copias datos.csv a una carpeta que ya tiene un datos.csv, el viejo desaparece sin aviso. Para que pregunte antes: cp -i (Mac) o Copy-Item -Confirm (PowerShell).
### mv — mover y renombrar
Mover es como cortar y pegar: el archivo desaparece del origen y aparece en el destino. Pero mv tiene un truco: si el destino es un nombre de archivo en la misma carpeta, lo que realmente hace es RENOMBRAR. Un comando, dos funciones.
1# 🍎 Mac Terminal:2mv archivo.txt otra-carpeta/ # Mover a otra carpeta3mv nombre-viejo.txt nombre-nuevo.txt # Renombrar (mismo lugar, distinto nombre)45# 🟦 Windows PowerShell:6Move-Item archivo.txt otra-carpeta/ # Mover a otra carpeta7Move-Item nombre-viejo.txt nombre-nuevo.txt # Renombrar8# Atajo: mv también funciona como alias9mv archivo.txt otra-carpeta/
mv/Move-Item: mover si cambias de carpeta, renombrar si solo cambias el nombre.
Consejo de senior: renombrar archivos con mv es algo que harás constantemente. En mis proyectos, a menudo empiezo con datos-v1.csv y luego renombro a datos-final.csv, datos-final-v2.csv, datos-final-final.csv... (sí, esto es tan malo como suena — por eso existe Git, que aprenderás en la Skill 4).
### rm — eliminar archivos (con cuidado)
Eliminar desde la terminal es diferente a la papelera de reciclaje. Cuando eliminas con rm (Mac) o Remove-Item (PowerShell), el archivo NO va a la papelera — desaparece directamente. Es como quemar un documento vs tirarlo al cubo de basura donde podrías recuperarlo.
1# 🍎 Mac Terminal:2rm archivo.txt # Eliminar un archivo3rm archivo1.txt archivo2.txt # Eliminar varios4rm -r carpeta/ # Eliminar carpeta y todo su contenido56# 🟦 Windows PowerShell:7Remove-Item archivo.txt # Eliminar un archivo8Remove-Item archivo1.txt, archivo2.txt # Eliminar varios9Remove-Item carpeta/ -Recurse # Eliminar carpeta y contenido10# Atajo:11rm archivo.txt # También funciona como alias
rm/Remove-Item: elimina PERMANENTEMENTE. No hay papelera de reciclaje.
⚠️ IMPORTANTE: rm no tiene "¿estás seguro?" ni papelera de reciclaje. Lo que borras, desaparece. En Mac, "rm -rf /" intentaría borrar TODO tu disco (nunca lo hagas). En PowerShell, Remove-Item -Recurse -Force es igual de destructivo. Regla de oro: antes de borrar, haz ls para confirmar qué estás a punto de eliminar.
### Diagrama: flujo de operaciones con archivos
### Proyecto mini: estructura de un proyecto de datos
Vamos a aplicar todo lo aprendido creando la estructura de carpetas típica de un proyecto de datos. Los ingenieros de datos organizamos nuestros proyectos con carpetas como data/, scripts/, output/ y docs/. Hagámoslo:
1# Mac (Terminal/zsh):2mkdir proyecto-ventas3cd proyecto-ventas4mkdir data scripts output docs5ls67# Windows (PowerShell):8mkdir proyecto-ventas9cd proyecto-ventas10mkdir data, scripts, output, docs11ls
En 4 comandos tienes la estructura base de un proyecto real. En PowerShell las carpetas se separan con comas.
1# 🍎 Mac — crear archivos iniciales:2touch data/.gitkeep3touch scripts/limpiar_datos.py4touch docs/README.md5echo "# Proyecto Ventas" > docs/README.md67# 🟦 PowerShell — crear archivos iniciales:8New-Item data/.gitkeep9New-Item scripts/limpiar_datos.py10New-Item docs/README.md11echo "# Proyecto Ventas" > docs/README.md
Creamos archivos con nombres descriptivos. El .gitkeep es para que Git reconozca carpetas vacías.
Ahora tienes un proyecto organizado. Los datos irán en data/, los scripts en scripts/, los resultados en output/ y la documentación en docs/. Esta estructura es una convención en la industria — cuando otro ingeniero abra tu proyecto, sabrá inmediatamente dónde buscar cada cosa.
Consejo de senior: siempre crea un README.md en la raíz de cada proyecto. Aunque solo tenga una línea. Tu yo del futuro (y tus compañeros) te lo agradecerán. He perdido horas intentando entender proyectos propios de hace 6 meses porque no dejé ni una nota.
### Los errores más comunes (y qué significan)
Estos cinco mensajes cubren el 90% de los errores que vas a ver al copiar, mover y crear. Todos tienen la misma estructura: el comando que falló, luego qué fichero o carpeta es, luego por qué:
- cp: -r not specified; omitting directory — intentaste copiar una carpeta sin -r. Solución: cp -r carpeta/ destino/
- cp: cannot stat 'noexiste.txt': No such file or directory — el archivo que quieres copiar no existe. ¿Errata en el nombre? Comprueba con ls.
- mkdir: cannot create directory 'carpeta': File exists — la carpeta ya existe. No es un error grave: ya tienes lo que querías.
- mkdir: cannot create directory 'sin/padre': No such file or directory — la carpeta intermedia no existe. Solución: mkdir -p sin/padre.
- mv: cannot overwrite non-directory with directory — intentas mover una carpeta encima de un archivo. Decide: ¿quieres borrar el archivo primero o renombrar la carpeta?
### El comodín *: seleccionar varios archivos de golpe
El asterisco (*) en la terminal significa "cualquier cosa". Lo usarás para seleccionar grupos de archivos sin escribir todos los nombres. temp*.txt selecciona todo lo que empieza por "temp" y acaba en ".txt". *.csv selecciona todos los CSV de la carpeta. Es potente y peligroso a partes iguales:
1# Listar solo los CSV:2ls *.csv34# Copiar todos los TXT a otra carpeta:5cp *.txt backup/67# ⚠️ EL PELIGRO: un espacio de más y borras TODO8rm temp*.txt # ✅ Borra temp1.txt, temp2.txt (lo que empieza por temp)9rm temp *.txt # 🔴 Borra "temp" (no existe) Y TODOS los .txt de la carpeta1011# La regla: SIEMPRE haz ls primero con el mismo patrón12ls temp*.txt # Confirma que sale lo que esperas13rm temp*.txt # Ahora sí, borra solo eso
* = "cualquier cosa". Un espacio de más cambia completamente lo que se borra. ls primero, rm después.
## ejercicios
Monta tu proyecto de análisis
Estos tres ejercicios son un mismo flujo: aquí montas el proyecto "analisis-clientes" y en los siguientes trabajarás sobre él. Crea la estructura de carpetas (data/raw, data/processed, notebooks, scripts, reports), coloca el dataset inicial de ventas en data/raw/ventas-enero.csv y crea unos ficheros temporales de ejemplo (temp1.txt, temp2.txt y una carpeta cache/) que aparecen al trabajar y que limpiarás al final. 💡 Qué deberías ver: ls muestra cache, data, notebooks, reports, scripts, temp1.txt y temp2.txt. ls data/raw muestra ventas-enero.csv.
Organiza los datos del proyecto
Seguimos en el proyecto "analisis-clientes" que montaste. Antes de procesar el dataset, tu jefa quiere una copia de seguridad. Copia data/raw/ventas-enero.csv a una carpeta backup/, mueve el original a data/processed/ y renombra la copia a ventas-enero-backup.csv. (Si empiezas directamente aquí, ejecuta primero la solución del ejercicio anterior para tener el proyecto y los ficheros.) 💡 Qué deberías ver: ls backup/ muestra ventas-enero-backup.csv. ls data/processed/ muestra ventas-enero.csv. ls data/raw/ no muestra nada (el original se movió).
Limpia los temporales del proyecto
Último paso del flujo: tu proyecto "analisis-clientes" tiene los ficheros temporales que creaste al montarlo (temp1.txt, temp2.txt y la carpeta cache/) y que ya no necesitas. Elimínalos de forma segura, verificando siempre antes de borrar. 💡 Qué deberías ver: ls temp*.txt muestra solo temp1.txt y temp2.txt (nada más). Después de borrar, ls muestra solo backup, data, notebooks, reports y scripts — sin temporales ni cache.
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...