У меня есть две проблемы с моим сценарием, который копирует файлы и добавляет метку времени к имени.
cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%T")
Вышеуказанное добавляет в Test2
качестве имени файла имя, но я хочу, чтобы оно сохранило имя файла исходного исходного файла, которое в этом примере называется Test
.
cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%r")
Другая проблема, когда я добавляю в %r
качестве кода метки времени, я получаю сообщение об ошибке, указывающее, что целевой «PM» не является каталогом. Я пытаюсь получить метку времени как 12-часовое время.
shell-script
date
file-copy
timestamps
Брайан
источник
источник
date +"%m-%d-%y-%I:%M:%S_%p"
Ответы:
Одна из ваших проблем заключается в том, что вы исключили двойные кавычки вокруг подстановки команд, поэтому выходные данные
date
команды были разделены пробелами. См. Почему мой сценарий оболочки задыхается от пробелов или других специальных символов? Это действительная команда:Если вы хотите добавить к исходному имени файла, вы должны иметь это в переменной.
Если вы используете bash, вы можете вместо этого использовать расширение скобки.
Если вы хотите скопировать файл в другой каталог и добавить метку времени к исходному имени файла, вы можете сделать это следующим образом -
${source##*/}
расширить до значенияsource
без части до последнего/
(удаляет самый длинный префикс, соответствующий шаблону).*/
):Если
Test1
это каталог, он копируется рекурсивно, и файлы внутри каталога сохраняют свое имя: только к каталогу верхнего уровня добавляется метка времени (напримерTest1/foo
, копируется вTest1-05-10-15-07:19:42 PM
). Если вы хотите добавить метку времени ко всем именам файлов, это другая проблема.Выбранный вами формат меток времени - плохая идея: его трудно читать людям и трудно сортировать. Вы должны использовать формат, который легче читать и который можно легко отсортировать, то есть с частями в порядке убывания важности: год, месяц, день, час, минута, секунда и с разделением между частью даты и частью времени.
источник
cp -a /home/bpacheco/Test1/Test{,"-$(date +"%m-%d-%y-%r")"} /home/bpacheco/Test2