Tengo dos problemas con mi script que copia archivos y agrega una marca de tiempo al nombre.
cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%T")
Lo anterior se agrega Test2
como el nombre del archivo, pero quiero que mantenga el nombre del archivo fuente original que en este ejemplo se llama Test
.
cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%r")
El otro problema es cuando agrego el %r
código de marca de tiempo y aparece el error que indica que "PM" de destino no es un directorio. Estoy tratando de obtener la marca de tiempo como reloj de 12 horas.
date +"%m-%d-%y-%I:%M:%S_%p"
Respuestas:
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:Si desea agregar al nombre del archivo original, debe tenerlo en una variable.
Si está usando bash, puede usar la expansión de llaves en su lugar.
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 desource
sin la parte hasta el final/
(elimina el prefijo más largo que coincida con el patrón*/
):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 copiaTest1-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.
fuente
cp -a /home/bpacheco/Test1/Test{,"-$(date +"%m-%d-%y-%r")"} /home/bpacheco/Test2