Одна из ваших проблем заключается в том, что вы исключили двойные кавычки вокруг подстановки команд, поэтому выходные данные date
команды были разделены пробелами. См. Почему мой сценарий оболочки задыхается от пробелов или других специальных символов? Это действительная команда:
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"
Если вы хотите добавить к исходному имени файла, вы должны иметь это в переменной.
source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"
Если вы используете bash, вы можете вместо этого использовать расширение скобки.
cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}
Если вы хотите скопировать файл в другой каталог и добавить метку времени к исходному имени файла, вы можете сделать это следующим образом - ${source##*/}
расширить до значения source
без части до последнего /
(удаляет самый длинный префикс, соответствующий шаблону). */
):
source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"
Если Test1
это каталог, он копируется рекурсивно, и файлы внутри каталога сохраняют свое имя: только к каталогу верхнего уровня добавляется метка времени (например Test1/foo
, копируется в Test1-05-10-15-07:19:42 PM
). Если вы хотите добавить метку времени ко всем именам файлов, это другая проблема.
Выбранный вами формат меток времени - плохая идея: его трудно читать людям и трудно сортировать. Вы должны использовать формат, который легче читать и который можно легко отсортировать, то есть с частями в порядке убывания важности: год, месяц, день, час, минута, секунда и с разделением между частью даты и частью времени.
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")"