Я думаю, что Вы ищете pmount
.
Если Вы хотите автоматическое монтирование на вставку, посмотрите Автомонтирующиеся карты с интерфейсом USB на Debian.
Если Ваша система использует udisks2, это - предпочтительный способ реагировать на вставку съемного устройства хранения. Посмотрите Дугу Wiki для подсказок по конфигурации для Udisks.
Иначе программа, которая реагирует, когда новое устройство появляется, является udev, таким образом, автоматическое монтирование инициировано правилом udev. usbmount пакет предоставляет правила udev автоматически смонтировать устройства хранения USB и немногих других. Вызов mount
от udev правила не работают на файловые системы FUSE (такие как ntfs-3g), так используйте udisks при необходимости в этом.
Вы не можете автоматически размонтировать медиа, когда они удалены, потому что причинная связь не прокладывает себе путь. Медиа должны быть размонтированы, прежде чем это будет удалено. Для медиа только для чтения можно сойти с рук размонтирование после удаления, хотя это могло бы перепутать некоторые приложения, если у них есть файлы, открытые во внезапно исчезнувшей файловой системе. Для перезаписываемых медиа при отключении смонтированной файловой системы повреждение данных вероятно.
Это не работает потому что команда date
возвращает строку с пробелами в нем.
$ date
Wed Oct 16 19:20:51 EDT 2013
Если Вы действительно захотите имена файлов как этот, то необходимо будет перенести ту строку в кавычки.
$ touch "foo.backup.$(date)"
$ ll foo*
-rw-rw-r-- 1 saml saml 0 Oct 16 19:22 foo.backup.Wed Oct 16 19:22:29 EDT 2013
Вы, вероятно, думаете о другой строке, которая будет добавлена, было бы мое предположение все же. Я обычно использую что-то вроде этого:
$ touch "foo.backup.$(date +%F_%R)"
$ ll foo*
-rw-rw-r-- 1 saml saml 0 Oct 16 19:25 foo.backup.2013-10-16_19:25
См. страницу справочника для даты более форматирования коды вокруг вывода для даты и время.
Если Вы хотите взять на себя полное управление при консалтинге со страницей справочника, можно сделать вещи как это:
$ date +"%Y%m%d"
20131016
$ date +"%Y-%m-%d"
2013-10-16
$ date +"%Y%m%d_%H%M%S"
20131016_193655
Примечание: Можно использовать date -I
или date --iso-8601
который произведет идентичный вывод для date +"%Y-%m-%d
. Этот переключатель также имеет способность взять аргумент для указания на различные форматы времени:
$ date -I=?
date: invalid argument ‘=?’ for ‘--iso-8601’
Valid arguments are:
- ‘hours’
- ‘minutes’
- ‘date’
- ‘seconds’
- ‘ns’
Try 'date --help' for more information.
Примеры:
$ date -Ihours
2019-10-25T01+0000
$ date -Iminutes
2019-10-25T01:21+0000
$ date -Iseconds
2019-10-25T01:21:33+0000
cp foo.txt {,.backup.`date`}
Это расширяется до чего-то как cp foo.txt .backup.Thu Oct 17 01:02:03 GMT 2013
. Пространство перед фигурными скобками запускает новое слово.
cp foo.txt {,.backup. $((date)) }
Фигурные скобки находятся в отдельных словах, таким образом, они интерпретируются буквально. Кроме того, $((…))
синтаксис для арифметического расширения; вывод date
ничто как арифметическое выражение. Замена команды использует единственный набор круглых скобок: $(date)
.
cp foo.txt foo.backup.`date`
Ближе. Вы, возможно, выразили это фигурными скобками как cp foo.{txt,.backup.`date`}
. Существует все еще проблема что вывод date
содержит пробелы, таким образом, это должно быть помещено в двойных кавычках. Это работало бы:
cp foo.{txt,backup."`date`"}
или
cp foo.{txt,backup."$(date)"}
Выходной формат по умолчанию date
не является подходящим к имени файла, и оно не могло бы даже работать, если локаль использует /
символы в выходном формате по умолчанию. Используйте Y-M-D формат даты так, чтобы лексикографический порядок на имена файлов был хронологическим порядком (и также избегать неоднозначности между американскими и международными форматами даты).
cp foo.{txt,backup."$(date +%Y%m%d-%H%M%S)"}
Используйте функцию, она сделает Вашу жизнь легче. Это - то, что я использую:
backup () {
for file in "$@"; do
local new=${file}.$(date '+%Y%m%d')
while [[ -f $new ]]; do
new+="~";
done;
printf "copying '%s' to '%s'\n" "$file" "$new";
\cp -ip "$file" "$new";
done
}
Если Вы действительно хотите использовать подробную дату, необходимо защитить обратную галочку. С этим форматом даты то, что он встроил пробелы, нет - нет в оболочке Unix, если Вы не помещаете их в кавычках (или выйдите из них некоторый другой путь).
cp foo.txt "foo-`date`.txt"
Однако я предпочитаю использовать более короткий формат ISO:
cp foo.txt foo-`date --iso`.txt
Как date
имеет пробелами по умолчанию в ее выводе, Ваша последняя отказавшая команда. Если Вы заключили последний спор в кавычки внутри с "
, это должно работать. Ваши другие попытки имеют просто неправильный синтаксис
Здесь возможное решение без пробелов:
cp foo.txt foo.backup.$(date --iso-8601=seconds)
или
cp foo.txt foo.backup.`date --iso-8601=seconds`
Если Вы добавляете
bk() {
cp -a "$1" "${1}_$(date --iso-8601=seconds)"
}
к Вашему .bashrc
и re-login/let, Ваш удар перечитал его, необходимо только звонить bk file.txt
.
--iso-8601
переключатель, таким образом, я поместил ссылку здесь. Опции даты GNU: - iso-8601
– Ivan Chau
17.10.2013, 04:14
Вы копируете файл в резервную копию, имя которой создается с добавленной отметкой времени
cp foo.txt backup_`date +"%d-%m-%Y"`.txt
ИЛИ:
Вы можете отображать содержимое файла, используя "cat" и перенаправить вывод в файл резервной копии, имя которого создается с добавленной отметкой времени
cat foo.txt > backup_`date +"%d-%m-%Y"`.txt
. Вы также можете использовать дополнительные параметры управления ФОРМАТОМ в соответствии с вашими потребностями Например:% H,% M,% S и т. д.
В bash вы можете набрать:
cp /path/to/long/filename !#$_$(date +Is)
Что расширяется до:
cp /path/to/long/filename /path/to/long/filename_$(date +Is)
Результат:
$ ls /path/to/long/filename*
filename filename_2017-05-10T11:50:10+0300
Говядина date -Is
. Мне нравится его использовать, потому что его легко запомнить, ввести и использовать короткие версии (например, -In
, если вы помешаны на точности).
!
запускает указатель события:
!# Вся набранная на данный момент командная строка.
А $
— указатель слова:
$ Последнее слово. Обычно это последний аргумент, но он расширяется до нулевого слова, если в строке есть только одно слово.
Когда мне нужно сделать резервную копию файла, я обычно делаю это именно так.
cp foo.txt foo.backup.$(date +%F).txt
ls -l
foo.txt
foo.backup.2017-9-19.txt
Если вам просто нужна резервная копия файла или каталога, то зачем указывать место назначения, просто используйте расширение оболочки, чтобы добавить дату в конец имени файла копии.
т.е.
cp filename.sh{,."`date`"}
, что приводит к
filename.sh.Sun 29 Sep 00:44:43 BST 2019
или просто используйте
cp filename{,.20190929}
filename.sh.20190929
Добавьте дату в соответствии с вашими потребностями.:)
touch foo`date +%F`
также хорошо работает. – Vadzim 23.12.2014, 16:28