for dateNfile in $(grep dateishere *html | sed -r 's/^([^:]*):(.*)dateishere/\2:\1/' | sort -n)
do
name=${dateNfile/*:/}
# echo date=${dateNfile/:*/}
mv $name /other/location
done
Таким образом, я предполагаю, что существует всего одна строка на файл, содержа 'dateishere', и что строка запускается с даты, но команда sed могла быть изменена, для вырезания даты даже в других случаях.
Если бы у Вас есть пробелы в именах файлов, или разрывы строки и такой, вещи становятся немного более сложными, таким образом, я хотел бы проигнорировать их, если это возможно. Но от Вашего утверждения, это не имеет место.
Я просто нашел маленькую программу C названной writevt
это добивается цели. Захватите исходный код здесь. Заставить его скомпилировать с gcc
просто удалите следующие строки сначала:
#include <lct/cline.h>
#include <lct/utils.h>
Обновление. Команда является теперь частью консольных инструментов, таким образом доступных в более свежих системах, если Ваше распределение не использует kbd вместо консольных инструментов, в этом случае можно скомпилировать его из источника (много более поздней версии, никакая необходимая модификация).
Использование:
sudo writevt /dev/ttyN command
Обратите внимание, что по некоторым причинам необходимо использовать '\r'
(или '\x0D'
) вместо '\n'
(или '\x0A'
) отправить возврат.
Терминал удваивается как две вещи: устройство ввода данных (такое как клавиатура) и дисплей (такой как монитор). Когда Вы читаете из терминала, Вы получаете то, что прибывает из устройства ввода данных. Когда Вы пишете в терминал, данные идут на дисплей.
Нет никакого общего способа вызвать вход в терминал. Редко существует любая потребность сделать так. Если необходимо взаимодействовать с программой, которая требует терминала, используйте специализированный эмулятор терминала те, которые Ожидают или Пустой, или обертка программируемого терминала, такая как Screen или Tmux. Можно вызвать вход в консоль Linux с ioctl. Можно вызвать вход в эмулятор терминала X11 с инструментами, такими как xdotool или xmacro.
screen
или tmux
и используйте их stuff
(экран) или send-key
(tmux) команда или их функция буфера.
– Gilles 'SO- stop being evil'
14.09.2012, 21:11
screen
или tmux
инструменты)?
– Emanuel Berg
15.09.2012, 02:34
screen -X stuff 'note version one'
.
– Gilles 'SO- stop being evil'
15.09.2012, 02:40
По крайней мере, Linux и BSDs имеют TIOCSTI ioctl для продвижения символов назад к терминальному входному буферу (до предела [4 096 символов на Linux]):
#include <sys/ioctl.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
void stackchar(char c)
{
if (ioctl(0, TIOCSTI, &c) < 0) {
perror("ioctl");
exit(1);
}
}
int main(int argc, char *argv[])
{
int i, j;
char c;
for (i = 1; i < argc; i++) {
if (i > 1) stackchar(' ');
for (j=0; (c = argv[i][j]); j++) {
stackchar(c);
}
}
exit(0);
}
Скомпилируйте его и назовите его как:
cmd foo bar < "$some_tty"
продвигать символы назад на некотором tty.
И в жемчуге:
require "sys/ioctl.ph";
ioctl(STDIN, &TIOCSTI, $_) for split "", join " ", @ARGV;
Править: Я понимаю теперь, что это - тот же ioctl как в writevt решении. Комментарий и название команды вводят в заблуждение как работы TIOCSTI для любого терминала, не просто VTs.
У меня есть более полная демонстрация на Stack Overflow .
В python вы можете:
import fcntl
import sys
import termios
with open('/dev/tty1', 'w') as fd:
for char in "ls -la\n":
fcntl.ioctl(fd, termios.TIOCSTI, char)
Это предполагает простую "команду"
значение ls -la
и использование пути tty, указанного OP.
progname
и_
, и прокомментируйте несколько вызовов функции вmain()
– Michael Mrozek♦ 14.09.2012, 01:45_()
функция обычно является знаком gettext того, чтобы быть используемым. Кажется небольшим излишеством для такой простой части демонстрационного кода, но не причиняет боль, я предполагаю. – jw013 14.09.2012, 01:55