Eines Ihrer Probleme ist, dass Sie die Anführungszeichen um die Befehlsersetzung weggelassen haben, sodass die Ausgabe des date
Befehls in Leerzeichen aufgeteilt wurde. Siehe Warum verschluckt sich mein Shell-Skript an Leerzeichen oder anderen Sonderzeichen? Dies ist ein gültiger Befehl:
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"
Wenn Sie an den ursprünglichen Dateinamen anhängen möchten, müssen Sie diesen in einer Variablen haben.
source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"
Wenn Sie bash verwenden, können Sie stattdessen die Klammererweiterung verwenden.
cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}
Wenn Sie die Datei in ein anderes Verzeichnis kopiert werden soll, und den Zeitstempel an den ursprünglichen Dateinamen anhängen, können Sie es auf diese Weise tun - ${source##*/}
dehnt sich auf den Wert source
ohne den Teil bis zuletzt /
(es entfernt die längste Präfix der Musterabgleich */
):
source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"
Wenn Test1
es sich um ein Verzeichnis handelt, wird es rekursiv kopiert, und die Dateien im Verzeichnis behalten ihren Namen: Nur das oberste Verzeichnis wird mit einem Zeitstempel versehen (z. B. Test1/foo
wird kopiert Test1-05-10-15-07:19:42 PM
). Wenn Sie einen Zeitstempel an alle Dateinamen anhängen möchten, liegt ein anderes Problem vor.
Ihre Wahl des Zeitstempelformats ist eine schlechte Idee: Es ist für Menschen schwer zu lesen und schwer zu sortieren. Sie sollten ein Format verwenden, das einfacher zu lesen und zu sortieren ist, dh Teile in absteigender Reihenfolge nach Wichtigkeit: Jahr, Monat, Tag, Stunde, Minute, Sekunde und mit einer Trennung zwischen Datums- und Zeitteil.
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")"