Uno de sus problemas es que omitió las comillas dobles alrededor de la sustitución del comando, por lo que la salida del date
comando se dividió en espacios. Consulte ¿Por qué mi script de shell se ahoga en espacios en blanco u otros caracteres especiales? Este es un comando válido:
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"
Si desea agregar al nombre del archivo original, debe tenerlo en una variable.
source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"
Si está usando bash, puede usar la expansión de llaves en su lugar.
cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}
Si desea copiar el archivo en un directorio diferente y agregar la marca de tiempo al nombre del archivo original, puede hacerlo de esta manera: se ${source##*/}
expande al valor de source
sin la parte hasta el final /
(elimina el prefijo más largo que coincida con el patrón */
):
source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"
Si Test1
es un directorio, se copia de forma recursiva y los archivos dentro del directorio mantienen su nombre: solo el directorio de nivel superior tiene una marca de tiempo adjunta (por ejemplo, Test1/foo
se copia Test1-05-10-15-07:19:42 PM
). Si desea agregar una marca de tiempo a todos los nombres de archivo, ese es un problema diferente.
Su elección del formato de marca de tiempo es una mala idea: es difícil de leer para los humanos y difícil de clasificar. Debe usar un formato que sea más fácil de leer y que pueda clasificarse fácilmente, es decir, con partes en orden decreciente de importancia: año, mes, día, hora, minuto, segundo y con una separación entre la parte de la fecha y la parte de la hora.
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")"