Uno dei tuoi problemi è che hai lasciato fuori le doppie virgolette attorno alla sostituzione del comando, quindi l'output del date
comando è stato diviso in spazi. Vedi Perché il mio script shell si soffoca su spazi bianchi o altri caratteri speciali? Questo è un comando valido:
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"
Se vuoi aggiungere al nome del file originale, devi averlo in una variabile.
source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"
Se stai usando bash, puoi invece usare l'espansione del controvento.
cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}
Se vuoi copiare il file in un'altra directory e aggiungere il timestamp al nome del file originale, puoi farlo in questo modo: si ${source##*/}
espande al valore di source
senza la parte fino all'ultima /
(rimuove il prefisso più lungo corrispondente al modello */
):
source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"
Se Test1
è una directory, viene copiata in modo ricorsivo e i file all'interno della directory mantengono il loro nome: solo la directory di livello superiore riceve un timestamp (ad esempio, Test1/foo
viene copiata Test1-05-10-15-07:19:42 PM
). Se vuoi aggiungere un timestamp a tutti i nomi dei file, questo è un problema diverso.
La scelta del formato timestamp è una cattiva idea: è difficile da leggere per gli umani e difficile da ordinare. È necessario utilizzare un formato più facile da leggere e che può essere facilmente ordinato, ovvero con parti in ordine decrescente di importanza: anno, mese, giorno, ora, minuto, secondo e con una separazione tra la parte della data e la parte dell'ora.
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y%m%d-%H%M%S")"
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y-%m-%dT%H%M%S%:z")"