Я не вижу, почему Вы перешли ко всей проблеме для изменения исходного кода ядра для добавления поддержки этого нестандартного последовательного порта I/O и IRQ. setserial(8)
программа должна смочь настроить его для Вас. Что-то вроде этого:
# setserial ttyS4 address 0x10 irq 9
См. Linux Последовательное ПРАКТИЧЕСКОЕ РУКОВОДСТВО для получения дополнительной информации.
Можно, конечно, сделать то, что Вы хотите, но это, вероятно, опасно, учитывая некоторые файлы, мог бы иметь пробелы на их имена. Вот один способ сделать это все же.
$ tar -zcvf DB-Backup-17082012.tgz $(ls -lrth|grep "Aug 17"|awk '{print $9}')
Это избавится от всех других данных столбца, которые Вы получаете от ls -lrth
и просто дайте Вам имена файлов.
Можно использовать Unix find
команда для получения списка всех файлов, которые были в последний раз изменены в данную дату и передают этот список по каналу к tar
следующим образом:
$ find . -type f -newermt 2012-08-17 ! -newermt 2012-08-18 -print0 | \
xargs -0 tar zcvf DB-Backup-17082012.tgz
Вышеупомянутое только найдет файлы, которые были в последний раз изменены 17.08.2012, но ничто более новое. -print0
говорит находят для разделения файлов, что это производит нулевые символы использования (\0
) и xargs -0
берет каждый из этих файлов и создает вызовы tar
добавление файлов в пакетах за один раз.
Это - вероятно, наименее производительный способ сделать это.
Примечание: Этот метод также рискует терять файлы, если Ваш имеют больше, чем можно передать как параметры командной строки tar
команда.
-print0
и xargs -0
избыточны, и можно использовать просто find
генерировать список и вызов tar
непосредственно:
$ find . -type f -newermt 2012-08-17 ! -newermt 2012-08-18 \
-exec tar zcvf DB-Backup-17082012.tgz {} \+
{} \+
аргументы для нахождения выше сделают 2 вещи. {}
заменит названием каждого файла как find
находит его в этом положении при вызове tar
и \+
говорит find
продолжать помещать столько файлов, сколько это может на командной строке перед вызовом tar
. Это сохраняет Вас при необходимости вызвать tar
100 раз, если у Вас есть 100 файлов для добавления к нему.
Если Вы делаете $(ls -lrth|grep "Aug 17")
Вы получаете целую строку, не только имена файлов как аргумент tar
, таким образом, это не будет работать. В целом Вы не должны анализировать вывод ls
.
То, что можно сделать, если у Вас есть относительно последняя версия Гну, находят (> = v4.3.3)
find . -maxdepth 1 -newermt 20120817T0000 -not -newermt 20130818T0000 -print0 \
| cpio --create --null --format=ustar \
| gzip > DB-Backup-17082012.tgz
Если Ваш find
не поддерживает -newermt
можно создать два файла с касанием с теми метками времени даты и просто использовать - более новый. Конечно, можно также использовать -daystart -mtime
но необходимо было бы вычислить количество дней (или метод проб и ошибок использования).
Одна рекомендация, которую я имею, состоит в том, чтобы использовать даты в файлах в форме YYYYMMDD. Сначала вида, более хорошего, если у Вас есть несколько файлов, которые запускаются с той же строки до даты и второй, что-то как 05062012 было бы неоднозначно в зависимости от человека, смотрящего на имя файла (5-го июня (Европа) или 6-го мая (США)). Таким образом, хотя 1708 должен быть 17-го августа, я назвал бы файл DB-Backup-20120817.tgz
Ваш текущий формат ls|grep "Aug 17"
ничего не производит. Вместо этого используйте следующий формат:
$ ls -ltr | grep 'Aug 17'
относительно $(ls -lrth|grep "Aug 17")
эта awk строка, вероятно, извлекла бы даты, которые Вы хотите:
$(ls -lrth|awk '/Aug/&&/17{print $0}')
tar
будет запущен многократно, и только последняя версия сохраняется. Количество символов является большим (100K или так), но я виделxargs
вызовите его команды многократно в реальной жизни. – Anthon 27.06.2013, 00:12\+
опция пострадала бы от той же проблемы затем? – slm♦ 27.06.2013, 02:41grep "Aug 17"|awk '{print $9'}
, обратите внимание также, что это эквивалентноawk '/Aug 17/{print $9}'
. См. также partmaps.org/era/unix/award.html#grep – tripleee 27.06.2013, 08:28