J'ai deux problèmes avec mon script qui copie des fichiers et ajoute un horodatage au nom.
cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%T")
Ce qui précède ajoute Test2
comme nom de fichier, mais je veux qu'il conserve le nom de fichier du fichier source d'origine qui, dans cet exemple, est nommé Test
.
cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%r")
L'autre problème est lorsque j'ajoute le %r
comme code d'horodatage, j'obtiens l'erreur indiquant que la cible "PM" n'est pas un répertoire. J'essaie d'obtenir l'horodatage en tant qu'horloge de 12 heures.
date +"%m-%d-%y-%I:%M:%S_%p"
Réponses:
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:Si vous souhaitez ajouter au nom de fichier d'origine, vous devez l'avoir dans une variable.
Si vous utilisez bash, vous pouvez utiliser l'expansion d'accolade à la place.
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 desource
sans la partie jusqu'au dernier/
(il supprime le préfixe le plus long correspondant au modèle*/
):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 exempleTest1/foo
est copié dansTest1-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.
la source
cp -a /home/bpacheco/Test1/Test{,"-$(date +"%m-%d-%y-%r")"} /home/bpacheco/Test2