Previsualitza i valida canvis de nom massius amb zmv

Quan una jornada de preparació de Macs acaba amb vint informes PDF, el desordre acostuma a entrar per una escletxa petita: cada fitxer té un nom correcte per a qui l’ha creat, però poc útil per a qui l’ha de trobar d’aquí a tres mesos. Espais, guions, noms de client llargs i números de sèrie parcials formen una barreja difícil de cercar i encara més difícil d’automatitzar.
zmv, una funció distribuïda amb zsh, permet reanomenar lots a partir de patrons amb captures. Té una virtut important per a feines delicades: pot simular tota l’operació abans de tocar cap fitxer. Zsh tracta el patró amb EXTENDED_GLOB; les captures entre parèntesis passen a ser $1, $2 i les següents dins del nom de destinació. Si dos fitxers acabarien amb el mateix nom o si el destí ja existeix, zmv atura el lot sencer abans d’executar cap moviment. (zsh.sourceforge.io)
Imaginem una carpeta amb informes com aquests:
Lliurament Mac - Fusteria Roca - 1042.pdf
Lliurament Mac - Fusteria Roca - 1043.pdf
Lliurament Mac - Clínica Nord - 2118.pdf
L’objectiu és deixar-los en un format estable, pensat per a una carpeta compartida o un gestor documental:
Fusteria Roca_1042_lliurament-mac.pdf
Clínica Nord_2118_lliurament-mac.pdf
Abans de començar, comproveu que la sessió és realment zsh i quina versió executa el Mac:
print -r -- "$ZSH_VERSION"
Aquesta ordre mostra la versió del procés actual. Terminal utilitza zsh com a shell predeterminat en la configuració habitual de macOS, tot i que una persona usuària o un administrador pot haver triat un altre shell per a les finestres noves. (support.apple.com) Si treballeu amb un Mac gestionat, també convé verificar que les polítiques corporatives no reemplacen el vostre .zshrc.
Situeu-vos a la carpeta de treball i carregueu zmv només per a la sessió actual:
cd ~/Documents/lliuraments-pendents
autoload -Uz zmv
cd canvia el directori de treball; aquí és una decisió de seguretat, perquè el patró següent només afectarà els elements de la carpeta actual. autoload -Uz zmv marca la funció perquè zsh la carregui quan calgui. L’opció -U evita que alias locals alterin la lectura de la funció. El mecanisme d’autocàrrega cerca funcions als directoris definits a fpath. (zsh.sourceforge.io)
Ara executeu una simulació:
zmv -n 'Lliurament Mac - ([^-]##) - ([0-9]##).pdf' '$1_$2_lliurament-mac.pdf'
-n imprimeix les ordres que s’executarien i no modifica res. El primer grup, ([^-]##), captura el nom del client fins al separador -. El segon, ([0-9]##), captura l’identificador numèric. Les cometes simples són intencionades: impedeixen que la shell expandeixi $1 i $2 abans que ho faci zmv.
Llegiu cada línia de la simulació. Si un client conté guions, aquest patró no el representa bé: adapteu-lo abans de continuar. Aquest és el punt en què una regla aparentment elegant revela si descriu la realitat.
Quan la sortida sigui correcta, executeu el canvi amb confirmació individual i traça visible:
zmv -iv 'Lliurament Mac - ([^-]##) - ([0-9]##).pdf' '$1_$2_lliurament-mac.pdf'
-i demana confirmació per a cada moviment i -v mostra l’ordre efectiva. Necessiteu permís d’escriptura sobre la carpeta, perquè el nom és una propietat de l’entrada dins del directori. Per comprovar el resultat, feu:
print -rl -- *_lliurament-mac.pdf
Aquesta ordre llista un fitxer per línia i conserva espais sense reinterpretar-los. Si el lot queda coherent, ja teniu una convenció reutilitzable i visible. La convenció importa tant com la velocitat: converteix una carpeta temporal en un arxiu que encara s’entén quan ja ningú recorda aquella tarda de lliuraments.
Repte final: amplieu el patró perquè també incorpori la data ISO del document, per exemple 2026-10-25_Fusteria Roca_1042_lliurament-mac.pdf, sense acceptar fitxers que no incloguin una data vàlida al nom original.