Скопіюйте файл та додайте часову позначку


13

У мене є два питання зі своїм сценарієм, який копіює файли та додає часову позначку до імені.

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-годинний годинник.


Додавання AM / PM додасть додаткового місця у імені файлу. Якщо ви наполягаєте на тому, щоб спробувати, спробуйте щось на зразок: cp -ra / home / bpacheco / Test1 "/ home / bpacheco / Test2 - $ (дата +% m-% d-% y-% r)"
Ромео Нінов

2
Абоdate +"%m-%d-%y-%I:%M:%S_%p"
don_crissti

Відповіді:


12

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

Жил, перша команда не буде працювати IMHO, перевірити позиції подвійних лапок. І дивіться мій коментар до питання
Ромео Нінов

@RomeoNinov Що не так з першою командою? Ви запустили його та отримали помилку?
Жил "ТАК - перестань бути злим"

Ви маєте рацію, команда дати виконується в
нижній частині

Жил, використовуючи наведений вище приклад, як би я скопіював файл із зазначеною вище інформацією про часові позначки в інший каталог. Наступна команда не працює:cp -a /home/bpacheco/Test1/Test{,"-$(date +"%m-%d-%y-%r")"} /home/bpacheco/Test2
Брайан

@Brian Я не впевнений, що я зрозумів ваш коментар, але дивіться свою редакцію.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.