Однією з ваших проблем є те, що ви залишили подвійні лапки навколо підстановки команд, тому вихід з 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")"