Avrei un approccio un po 'diverso, in quanto vorrei testare che il nome del file termina in .mp3
e la lunghezza della variabile t
è di 12 caratteri prima dell'elaborazione. Ciò dovrebbe impedirgli di agire su file che non sono conformi al modello ed evitare di lanciare errori, anche se gli errori in questo caso dovrebbero essere non fatali. Non mi piace la roba inutile emessa.
Questo è un esempio di esso sotto forma di script:
#!/bin/bash
for f in *.mp3; do
t="$(awk '/_.*/ { match($0, /_.*/); print substr($0, RSTART + 1, RLENGTH - 7); }'<<<"$f")"
if [[ ${#t} -eq 12 ]]; then
touch -t "$t" "$f"
fi
done
Questo è un esempio di script come one-liner, anche se molto lungo.
for f in *.mp3; do t="$(awk '/_.*/ { match($0, /_.*/); print substr($0, RSTART + 1, RLENGTH - 7); }'<<<"$f")"; if [[ ${#t} -eq 12 ]]; then touch -t "$t" "$f"; fi; done
Che può essere abbreviato in:
for f in *.mp3; do t="$(awk '/_.*/ { match($0, /_.*/); print substr($0, RSTART + 1, RLENGTH - 7); }'<<<"$f")"; [[ ${#t} -eq 12 ]] && touch -t "$t" "$f"; done
Se vuoi davvero abbreviare ulteriormente:
for f in *; do t="$(awk '/_.*/ { match($0, /_.*/); print substr($0, RSTART + 1, RLENGTH - 7); }'<<<"$f")"; touch -t "$t" "$f" 2>/dev/null; done
Il precedente modulo del comando composto non esegue il controllo degli errori e reindirizza l'output dell'errore del comando touch
in modo da non ingombrare lo schermo. Questa forma va bene in questo caso d'uso in quanto un comando tattile malformato sarà non fatale.