L'un de vos problèmes est que vous avez omis les guillemets autour de la substitution de commande, de sorte que la sortie de la date
commande a été divisée en espaces. Voir Pourquoi mon script shell s'étouffe avec les espaces ou d'autres caractères spéciaux? Ceci est une commande valide:
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"
Si vous souhaitez ajouter au nom de fichier d'origine, vous devez l'avoir dans une variable.
source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"
Si vous utilisez bash, vous pouvez utiliser l'expansion d'accolade à la place.
cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}
Si vous souhaitez copier le fichier dans un répertoire différent et ajouter l'horodatage au nom de fichier d'origine, vous pouvez le faire de cette façon - se ${source##*/}
développe à la valeur de source
sans la partie jusqu'au dernier /
(il supprime le préfixe le plus long correspondant au modèle */
):
source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"
Si Test1
est un répertoire, il est copié récursivement, et les fichiers à l'intérieur du répertoire conservent leur nom: seul le répertoire toplevel reçoit un horodatage ajouté (par exemple Test1/foo
est copié dans Test1-05-10-15-07:19:42 PM
). Si vous souhaitez ajouter un horodatage à tous les noms de fichiers, c'est un problème différent.
Votre choix de format d'horodatage est une mauvaise idée: il est difficile à lire pour les humains et difficile à trier. Vous devez utiliser un format plus facile à lire et qui peut être trié facilement, c'est-à-dire avec des parties par ordre décroissant d'importance: année, mois, jour, heure, minute, seconde, et avec une séparation entre la partie date et la partie heure.
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")"