Saltar al contenido

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-proyecto
3
4# Crear carpeta dentro de otra carpeta:
5mkdir mi-proyecto/datos
6
7# Crear toda una estructura de golpe (carpetas anidadas):
8# 🍎 Mac:
9mkdir -p mi-proyecto/datos/raw
10# 🟦 PowerShell:
11mkdir mi-proyecto/datos/raw
12# (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ío
3touch datos.csv readme.md # Crea varios a la vez
4
5# 🟦 Windows PowerShell:
6New-Item notas.txt # Crea un archivo vacío
7New-Item datos.csv, readme.md # Crea varios a la vez
8# 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 contenido
3echo "Segunda línea" >> saludo.txt # AÑADE al final (no sobreescribe)
4cat saludo.txt # Muestra el contenido del archivo
5
6# 🟦 Windows PowerShell:
7echo "Hola mundo" > saludo.txt # Crea archivo con ese contenido
8echo "Segunda línea" >> saludo.txt # AÑADE al final (no sobreescribe)
9Get-Content saludo.txt # Muestra el contenido del archivo
10# 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 archivo
3cp archivo.txt otra-carpeta/ # Copiar a otra carpeta
4cp -r mi-carpeta/ backup/ # Copiar carpeta ENTERA (-r = recursivo)
5
6# 🟦 Windows PowerShell:
7Copy-Item archivo.txt copia.txt # Copiar archivo
8Copy-Item archivo.txt otra-carpeta/ # Copiar a otra carpeta
9Copy-Item mi-carpeta/ backup/ -Recurse # Copiar carpeta entera
10# Atajo: cp también funciona como alias en PowerShell
11cp 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 carpeta
3mv nombre-viejo.txt nombre-nuevo.txt # Renombrar (mismo lugar, distinto nombre)
4
5# 🟦 Windows PowerShell:
6Move-Item archivo.txt otra-carpeta/ # Mover a otra carpeta
7Move-Item nombre-viejo.txt nombre-nuevo.txt # Renombrar
8# Atajo: mv también funciona como alias
9mv 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 archivo
3rm archivo1.txt archivo2.txt # Eliminar varios
4rm -r carpeta/ # Eliminar carpeta y todo su contenido
5
6# 🟦 Windows PowerShell:
7Remove-Item archivo.txt # Eliminar un archivo
8Remove-Item archivo1.txt, archivo2.txt # Eliminar varios
9Remove-Item carpeta/ -Recurse # Eliminar carpeta y contenido
10# 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

El ciclo de vida de un archivo en la terminal. rm es el punto sin retorno.

### 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-ventas
3cd proyecto-ventas
4mkdir data scripts output docs
5ls
6
7# Windows (PowerShell):
8mkdir proyecto-ventas
9cd proyecto-ventas
10mkdir data, scripts, output, docs
11ls

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/.gitkeep
3touch scripts/limpiar_datos.py
4touch docs/README.md
5echo "# Proyecto Ventas" > docs/README.md
6
7# 🟦 PowerShell — crear archivos iniciales:
8New-Item data/.gitkeep
9New-Item scripts/limpiar_datos.py
10New-Item docs/README.md
11echo "# 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 *.csv
3
4# Copiar todos los TXT a otra carpeta:
5cp *.txt backup/
6
7# ⚠️ EL PELIGRO: un espacio de más y borras TODO
8rm 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 carpeta
10
11# La regla: SIEMPRE haz ls primero con el mismo patrón
12ls temp*.txt # Confirma que sale lo que esperas
13rm 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

[01]

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.

Cargando editor...
[02]

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ó).

Cargando editor...
[03]

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.

Cargando editor...

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...