Tancàvem el Mòdul 1 prometent que aquí començava «la feina de debò amb les eines», i aquesta és la primera. Crear, copiar, moure i eliminar fitxers és l'operació més freqüent de qualsevol persona que administri un sistema, i també la més perillosa: a Linux no hi ha paperera de reciclatge, i un rm mal escrit no demana confirmació ni deixa rastre. En aquesta lliçó aprendràs a manipular fitxers i directoris amb precisió sobre srv-veloz-01, a protegir la teva feina amb còpies de seguretat instantànies i a reconèixer els paranys que fan que una ordre aparentment inofensiva destrueixi dades de producció.

Contingut

  1. Crear directoris amb mkdir i mkdir -p
  2. Crear i tocar fitxers amb touch
  3. Copiar amb cp: les opcions que importen
  4. Moure i reanomenar amb mv
  5. Eliminar amb rm i rmdir: el punt de no retorn
  6. Noms problemàtics: espais i guions inicials
  7. Còpies de seguretat ràpides abans de tocar res
  8. Cas pràctic: organitzar ~/veloz-ops i arxivar el CSV del dia

  1. Crear directoris amb mkdir i mkdir -p

mkdir (make directory) crea directoris, un o uns quants per invocació. El problema apareix amb estructures imbricades:

mkdir /srv/veloz/dades/historic/2026/08
mkdir: no s'ha pogut crear el directori «...»: El fitxer o directori no existeix

mkdir només crea l'últim element del camí i dóna per fet que els pares existeixen. L'opció -p (parents) crea tots els intermedis que faltin:

mkdir -pv ~/veloz-ops/logs/2026/08
mkdir: s'ha creat el directori '/home/joan/veloz-ops/logs/2026'
mkdir: s'ha creat el directori '/home/joan/veloz-ops/logs/2026/08'

-v només esmenta el que realment ha creat: ~/veloz-ops/logs ja existia des de la lliçó 01-02.

-p té una segona virtut, encara més important en scripts: no falla si el directori ja existeix. Sense -p, repetir mkdir informes retorna error i codi de sortida diferent de 0; amb -p, retorna 0 en silenci. És una operació idempotent: executar-la una o cent vegades produeix el mateix resultat. Per això en qualsevol script seriós hi veuràs sempre mkdir -p. A més existeix -m MODE per fixar els permisos en el moment de crear el directori, tema que abordarem a 02-03.

  1. Crear i tocar fitxers amb touch

touch té dos usos que convé no confondre: si el fitxer no existeix, el crea buit; si ja existeix, actualitza les seves dates d'accés i modificació sense tocar-ne el contingut.

touch ~/veloz-ops/bin/informe-diari.sh
ls -l ~/veloz-ops/bin/informe-diari.sh
-rw-rw-r-- 1 joan joan 0 ago  3 11:02 /home/joan/veloz-ops/bin/informe-diari.sh

Mida 0: fitxer buit, a punt per editar. El segon ús dóna nom a l'ordre i serveix per marcar fites: molts processos de còpia de seguretat decideixen què copiar comparant dates, i un touch torna a incloure el fitxer. Opcions útils: -c (no crear-lo si no existeix), -d "2026-07-01 09:00" (fixar una data concreta) i -r REF (copiar les dates d'un altre fitxer).

touch no crea fitxers amb contingut. Per a això faràs servir un editor o, a partir de 02-04, la redirecció.

  1. Copiar amb cp: les opcions que importen

La sintaxi és cp ORIGEN DESTÍ, però el comportament canvia segons si el destí existeix i és un directori:

cp enviaments.csv enviaments-copia.csv     # destí = nom de fitxer → còpia reanomenada
cp enviaments.csv /tmp/                    # destí = directori → /tmp/enviaments.csv
cp a.csv b.csv c.csv /tmp/backup/          # diversos orígens → el destí HA DE SER un directori

Si el destí és un fitxer que ja existeix, cp el sobreescriu sense avisar. Aquest és el primer parany seriós del dia.

Opció Nom Què fa
-r / -R recursive Copia directoris amb tot el seu contingut
-a archive Copia «tal qual»: recursiu + preserva metadades + enllaços simbòlics
-i interactive Pregunta abans de sobreescriure
-n no-clobber Mai no sobreescriu, i no pregunta
-v verbose Mostra cada fitxer copiat
-u update Copia només si l'origen és més nou, o el destí no existeix

Sense -r, copiar un directori falla amb cp: s'omet el directori '...'.

Què preserva exactament -a

-a equival a -dR --preserve=all, i aquesta expansió n'explica el valor. Preserva:

  • Mode (permisos): un script executable ho continua sent a la còpia.
  • Propietari i grup, si tens privilegis per assignar-los.
  • Marques de temps: la còpia conserva la data original, no la d'avui.
  • Enllaços simbòlics: els copia com a enllaços en lloc de seguir-los i duplicar dades.

Compara-ho amb -r a seques, que crea fitxers nous amb la data actual i els permisos filtrats per la teva umask (02-03). Per arxivar o fer còpies de seguretat, -a és gairebé sempre el correcte: vols una rèplica fidel, no una versió «acabada de fer».

cp -av ~/veloz-ops /tmp/veloz-ops-snapshot
'/home/joan/veloz-ops' -> '/tmp/veloz-ops-snapshot'
'/home/joan/veloz-ops/bin/informe-diari.sh' -> '/tmp/veloz-ops-snapshot/bin/informe-diari.sh'

El parany del destí existent

Amb cp, el que determina el resultat no és la barra final de l'origen, sinó si el destí existeix: si /tmp/desti no existeix, cp -a origen /tmp/desti crea la còpia amb aquest nom; si existeix, crea /tmp/desti/origen a dins. (A rsync, que veuràs a 07-03, la barra final de l'origen sí que canvia el significat; confondre tots dos comportaments és un clàssic.) La manera de no equivocar-se és comprovar-ho abans amb ls -d /tmp/desti.

  1. Moure i reanomenar amb mv

mv mou fitxers. I reanomena fitxers. I són exactament la mateixa operació: a Unix, el nom d'un fitxer no és res més que una entrada en un directori que apunta a les seves dades. Moure dins del mateix sistema de fitxers consisteix a esborrar aquesta entrada del directori d'origen i crear-la al de destí; si el directori és el mateix i només canvia el text de l'entrada, en diem «reanomenar».

mv informe.txt informe-2026-08-03.txt        # reanomenar
mv informe-2026-08-03.txt ~/veloz-ops/logs/  # moure
mv esborrany.md ~/veloz-ops/logs/final.md    # moure i reanomenar alhora

Conseqüència pràctica: moure dins del mateix disc és instantani, encara que siguin 50 GB, perquè no es copien dades. Moure entre discos diferents sí que implica copiar i esborrar, i per això triga.

Igual que cp, mv sobreescriu sense preguntar. -i pregunta abans de sobreescriure; -n no sobreescriu mai i no pregunta; -v mostra què fa.

mv -nv enviaments.csv /srv/veloz/dades/historic/

En scripts, -n és preferible a -i: un script no s'ha de quedar esperant una resposta que ningú no teclejarà.

  1. Eliminar amb rm i rmdir: el punt de no retorn

Llegeix aquesta secció dues vegades. rm és l'ordre que més dades ha destruït en la història d'Unix.

rm fitxer.txt               # esborra un fitxer
rm -r directori/            # esborra un directori i tot el seu contingut
rm -i *.tmp                 # pregunta per cadascun
rm -f fitxer                # força: no pregunta ni protesta si no existeix
rmdir directori-buit        # esborra un directori NOMÉS si és buit

No hi ha paperera. rm desvincula el nom i l'espai queda disponible per reutilitzar-se. La recuperació no és una operació d'usuari: exigeix eines forenses, desmuntar el sistema de fitxers i tot i així sol fracassar. Treballa sempre amb el supòsit que allò que esborres se n'ha anat.

rmdir és el complement segur: com que només esborra directoris buits, no pot destruir contingut per accident. Fes-lo servir quan la teva intenció sigui «netejar alguna cosa que ja hauria de ser buida»: si falla, és que hi havia alguna cosa inesperada, i això és informació valuosa.

Els paranys dels camins mal escrits

rm -rf /srv/veloz/dades /historic    # ← espai de més: esborra dades I /historic
rm -rf ~/veloz-ops /logs             # ← el mateix error, disfressat
rm -rf $DIR/*                        # ← si DIR és buida, això és rm -rf /*

L'espai accidental converteix un argument en dos, i rm esborra tots dos sense immutar-se. El tercer cas és la raó per la qual al Mòdul 3 aprendràs a posar les variables entre cometes i a donar-los valors per defecte.

Hàbits que et protegeixen, aplicant el que has après a 01-05:

ls -la /srv/veloz/dades/historic/2026/07        # 1. mirar primer què hi ha
echo rm -rf /srv/veloz/dades/historic/2026/07   # 2. imprimir sense executar i rellegir
rm -rf /srv/veloz/dades/historic/2026/07        # 3. executar només si era correcte

I dues regles més en producció: no facis servir mai rm -rf amb sudo sense haver llistat abans, i és preferible moure a un directori de quarantena quan l'operació no sigui trivialment reversible.

  1. Noms problemàtics: espais i guions inicials

El shell separa els arguments per espais, així que informe agost.txt es veu com dos arguments. La solució són les cometes o l'escapament:

mv "informe agost.txt" informe-agost.txt
mv informe\ agost.txt informe-agost.txt

Encara pitjor és un fitxer el nom del qual comença per guió:

rm -fitxer-estrany.txt
rm: opció no vàlida -- 'i'

rm interpreta el nom com a opcions agrupades. Hi ha dues solucions estàndard:

rm -- -fitxer-estrany.txt     # -- marca el final de les opcions
rm ./-fitxer-estrany.txt      # amb ./ al davant ja no comença per guió

El separador -- l'accepten gairebé tots els programes GNU i significa: «el que vingui després són arguments, no opcions». També et salvarà quan un patró de cerca comenci per guió.

Sobre accents i ñ: el sistema de fitxers els admet, però si aquests noms acaben en una URL, en un script portable o en un sistema Windows donaran guerra. Per al toolkit de Veloz Envíos adoptem una convenció estricta: minúscules, sense accents, guions en lloc d'espais.

  1. Còpies de seguretat ràpides abans de tocar res

Abans d'editar un fitxer de configuració en producció, fes-te aquesta còpia. Costa un segon i estalvia tardes senceres:

cp -a ~/veloz-ops/etc/veloz-ops.conf ~/veloz-ops/etc/veloz-ops.conf.bak

# Si necessites diverses còpies successives, posa la data al nom (substitució d'ordres, 03-06)
cp -a veloz-ops.conf "veloz-ops.conf.$(date +%F).bak"   # → veloz-ops.conf.2026-08-03.bak

-a és deliberat: la còpia conserva permisos i data original, així que serveix com a referència de «com estava això». Això és una còpia local: protegeix davant dels teus propis errors d'edició, no davant d'una fallada de disc. La còpia de seguretat real de Veloz Envíos, amb tar i rsync, arribarà a 05-01 i 07-03.

  1. Cas pràctic: organitzar ~/veloz-ops i arxivar el CSV del dia

# 1. Completar l'estructura del toolkit
mkdir -pv ~/veloz-ops/{bin,lib,etc,logs,tmp}

# 2. Crear el fitxer de configuració i la seva còpia de seguretat
touch ~/veloz-ops/etc/veloz-ops.conf
cp -a ~/veloz-ops/etc/veloz-ops.conf ~/veloz-ops/etc/veloz-ops.conf.bak

# 3. Preparar l'arxiu històric de dades per any i mes
sudo mkdir -pv /srv/veloz/dades/historic/2026/08

# 4. Arxivar una instantània del CSV del dia, conservant metadades
sudo cp -av /srv/veloz/dades/enviaments.csv \
            /srv/veloz/dades/historic/2026/08/enviaments-2026-08-03.csv

La sintaxi {bin,lib,...} és expansió de claus i l'estudiarem a 02-05; de moment queda't amb què crea els cinc directoris d'una passada. La barra invertida final del pas 4 permet continuar l'ordre a la línia següent.

Fixa't en la decisió de disseny: copiem, no movem. /srv/veloz/dades/enviaments.csv és el fitxer viu que l'API continua escrivint; moure'l trencaria l'aplicació. L'històric s'alimenta de còpies datades, i el nom enviaments-2026-08-03.csv és deliberadament ordenable alfabèticament, que aquí equival a ordenable cronològicament.

ls -lh /srv/veloz/dades/historic/2026/08/
total 24K
-rw-r--r-- 1 root root 21K ago  3 09:14 enviaments-2026-08-03.csv

L'hora que es mostra, 09:14, és la del fitxer original, no la de la còpia: això és -a fent la seva feina.

Errors Habituals i Consells

  • Creure que cp i mv avisen abans de sobreescriure. No ho fan. De manera interactiva pots definir alias cp='cp -i' i alias mv='mv -i' al teu ~/.bashrc (02-06), però no en depenguis: els àlies no s'expandeixen en scripts, i acostumar-te a la xarxa de seguretat fa que abaixis la guàrdia en màquines alienes.
  • Fer servir -r quan volies -a. Copiar ~/veloz-ops amb -r deixa els scripts amb la data d'avui i, en alguns casos, sense el bit d'execució.
  • Oblidar que rm -r no pregunta. rm -ri directori/ pregunta pas a pas; és lent, però en producció aquesta lentitud és una virtut.
  • Escriure el camí amb un espai de més. Abans de qualsevol esborrat recursiu, posa-hi echo al davant i llegeix el resultat.
  • Deduir el destí de cp per la barra final. Comprova amb ls -d si existeix.
  • Omplir el disc de .bak. Les còpies ràpides són per al moment; neteja les que ja no serveixen o acabaràs depurant un df al 100 %.

Exercicis

Exercici 1 — Muntar l'arxiu mensual. Prepara l'arxiu històric de juliol de 2026 i col·loca-hi dins una còpia de les dades actuals sense tocar el fitxer viu: (1) crea /srv/veloz/dades/historic/2026/07 en una sola ordre encara que faltin els pares; (2) copia-hi enviaments.csv com a enviaments-2026-07-31.csv preservant permisos i dates i mostrant què fa; (3) comprova que l'original continua al seu lloc; (4) explica per què -a és preferible a una còpia simple.

Exercici 2 — Netejar un desastre de noms. Un script mal escrit ha deixat a ~/veloz-ops/tmp els fitxers informe agost.txt, -tmp.log i resum.txt. Reanomena el primer a informe-agost.txt; esborra -tmp.log raonant per què rm -tmp.log falla; i mou resum.txt a ~/veloz-ops/logs/ sense sobreescriure res si ja n'hi hagués un amb aquest nom.

Exercici 3 — Auditar una ordre perillosa. Un company et passa això per «netejar l'històric antic» i et demana que ho revisis abans d'executar-ho com a root:

sudo rm -rf /srv/veloz/dades/historic /2025

Què fa realment? Quina era la intenció? Escriu una seqüència segura que aconsegueixi la intenció real.

Solucions

Solució a l'Exercici 1

sudo mkdir -p /srv/veloz/dades/historic/2026/07
sudo cp -av /srv/veloz/dades/enviaments.csv \
            /srv/veloz/dades/historic/2026/07/enviaments-2026-07-31.csv
ls -l /srv/veloz/dades/enviaments.csv

-p és imprescindible perquè falten dos nivells intermedis. -a és preferible perquè un arxiu històric ha de ser una rèplica fidel: si la còpia rebés la data d'avui perdríem la informació de quan es van generar les dades, que és justament el que un històric existeix per conservar. A més conserva els permisos, i evita que una auditoria futura trobi diferències sense explicació.

Solució a l'Exercici 2

cd ~/veloz-ops/tmp
mv "informe agost.txt" informe-agost.txt
rm -- -tmp.log
mv -n resum.txt ~/veloz-ops/logs/

rm -tmp.log falla perquè el shell lliura la cadena -tmp.log a rm i aquest la interpreta com a opcions agrupades (-t, -m, -p...). El separador -- li indica que no esperi més opcions; rm ./-tmp.log funciona igual de bé. A l'últim pas, -n garanteix que no es perdi un resum.txt preexistent i, a diferència de -i, no bloqueja l'execució esperant resposta.

Solució a l'Exercici 3

  1. Què fa realment: l'espai abans de /2025 converteix l'ordre en dos arguments. Esborra recursivament tot /srv/veloz/dades/historic —l'arxiu històric complet, tots els anys— i intenta a més esborrar el directori /2025 a l'arrel. Amb sudo i -f, sense ni una sola pregunta ni missatge d'error.

  2. La intenció era esborrar el subdirectori de l'any 2025: /srv/veloz/dades/historic/2025.

  3. Seqüència segura:

ls -la /srv/veloz/dades/historic/2025          # 1. confirmar camí i contingut
du -sh /srv/veloz/dades/historic/2025          # 2. el volum quadra amb el que s'esperava?
echo sudo rm -rf /srv/veloz/dades/historic/2025 # 3. imprimir sense executar i rellegir

# 4. Alternativa preferible en producció: quarantena en lloc d'esborrat
sudo mkdir -p /srv/veloz/quarantena
sudo mv -n /srv/veloz/dades/historic/2025 /srv/veloz/quarantena/

La quarantena és la millora clau: converteix una operació irreversible en reversible. Passades unes setmanes sense incidències, l'esborrat definitiu es fa amb tranquil·litat. Quan aprenguis find i tar a 05-01 aquest flux s'automatitzarà, però el criteri continuarà sent el mateix.

Conclusió

Ja domines la manipulació bàsica del sistema de fitxers: crees estructures completes amb mkdir -p, generes fitxers amb touch, copies amb fidelitat fent servir cp -a, entens que moure i reanomenar són la mateixa operació i —el més important— has interioritzat que rm no perdona. Saps tractar noms amb espais i amb guions inicials mitjançant cometes i --, tens l'hàbit de la còpia .bak abans d'editar res, i has deixat ~/veloz-ops i l'arxiu històric de /srv/veloz/dades organitzats per a la resta del curs.

Encara manipules els fitxers un a un o pel nom complet; seleccionar-los per patrons arribarà a 02-05 amb els comodins, i les cerques complexes a 05-01 amb find.

A la lliçó següent, 02-02, deixem de moure fitxers per començar a llegir què hi ha a dins. Aprendràs a explorar /var/log/veloz/app.log en directe, a buscar errors amb grep, a extreure columnes d'enviaments.csv i a ordenar i comptar resultats. És el moment en què les dades de Veloz Envíos comencen a respondre preguntes.

Curs de Programació en Bash

Mòdul 1: Introducció a Bash

Mòdul 2: Ordres Bàsiques de Bash

Mòdul 3: Fonaments de Scripting

Mòdul 4: Scripting Intermedi

Mòdul 5: Tècniques Avançades de Scripting

Mòdul 6: Treballar amb Eines Externes

Mòdul 7: Automatització i Programació

Mòdul 8: Bones Pràctiques i Optimització

Mòdul 9: Projectes del Món Real

© Copyright 2026. Tots els drets reservats