В crontab
:
* * * * * date >> dateFile.txt & sleep 30; date >> dateFile.txt &
Прямо, нет? =)
(Лучше поместить полный ПУТЬ команды дата
)
Другое решение:
while true; do date >> dateFile.txt & sleep 30; done
-121--118785-
Это, кажется, сработало для ОП.
gdbserver :2345 ls > /dev/null 2>&1 &
Я думаю, что причина этого в том, что когда программа демонизирована, она закрывает все STDIO 0,1 & 2. Следующим вводом-выводом будет 0. Если программа попытается использовать 0,1 или 2 с такими вещами, как printf или scanf, она будет действовать на неправильный ввод-вывод или закрытый ввод-вывод. Например, если он демон-образный, сокет открывается на 0, если был STDIN, и если принтер называется, он будет записывать в неоткрытый FD, что приведет к аварийному завершению программы.
-121--155828-
Есть также хорошие графические инструменты, чтобы помочь выяснить, что в занимает много места в каталоге.
Мне нравится Filelight , который является частью KDE. Здесь он изучает /var/cache на моем компьютере. Зеленый и желтый цвета относятся к apt , красный - к java , а пурпурный - к pbuilder .
Внутренние окружности непосредственных подкаталогов и они разбиты на более мелкие части во внешних окружностях. Этот инструмент позволяет легко просматривать и видеть, что занимает много места - не только большие файлы, но и большие коллекции небольших файлов.
Если команда принимает несколько файлов в качестве аргументов (а не в качестве содержимого, считываемого по каналу), то должна работать простая подстановка команд:
[script/binary/alias] $(find .)
Альтернативно, если команда принимает только один файл за раз, то цикл for должен выполнить этот трюк:
for file in $(find .); do [script/binary/alias] "$file"; done
В обоих случаях имена файлов, содержащие пробелы, табуляции, новую строку, символы подстановки, вызовут проблемы; цикл while/read справляется с этим:
find . | while IFS= read -r file; do [script/binary/alias] "$file"; done
Имена файлов, содержащих новые строки, все равно будут вызывать проблемы; поиск
с 0-раздельным выходом будет решать эти проблемы (здесь предполагается, что bash
, zsh
, ksh
):
find . -print0 | while IFS= read -rd '' file; do [script/binary/alias] "$file"; done
Во всех этих примерах найдем . -тип f
может быть более подходящим, если Вы хотите обрабатывать только обычные файлы.
Если вы хотите, чтобы псевдонимы раскрывались после xargs
, вы можете сделать:
alias xargs='xargs '
Однако обратите внимание, что только первое слово после xargs
подлежит раскрытию псевдонима и может иметь неожиданные эффекты, если у вас есть псевдонимы для стандартных команд.
$ alias xargs='xargs ' a='echo test'
$ set -x
$ echo x | xargs a
+ echo x
+ xargs echo test
test x
$ echo x | xargs -r a
+ echo x
+ xargs -r a
xargs: a: No such file or directory
Вы можете назвать свой псевдоним как-нибудь иначе и использовать более разумное поведение по умолчанию для xargs
. Например, с GNU xargs
:
alias axargs='xargs -r -d "\n" '
Теперь подстановка процесса расширяется до одного аргумента: имени файла, который для <(...)
содержит вывод команды ( как прямой эфир).
В выводе find
это полезно только для команд, которые принимают в качестве аргумента имя файла, которое, как ожидается, будет содержать список файлов, разделенных новой строкой.
feh
является одним из них:
feh -f <(find . -mtime -1 -type f -name '*.jpg')
Это работает, только если имена файлов не содержат символов новой строки.
В реализации GNU xargs
есть опция -a
для получения списка аргументов из файла и в сочетании с -0
и -print0
(или -exec printf '% s \ 0' {} +
) опция find
позволяет надежно передать список имен файлов:
xargs -r0a <(find ... -print0) feh....
Это не хотя помогает решить вашу проблему с псевдонимом.
Теперь, если вы хотите передать вывод команды в качестве аргумента (ов) другой команде, вы должны использовать замену command вместо замены process . Однако остерегайтесь нескольких предостережений.
cmdA "$(cmdB)"
передает вывод cmdB
без завершающих символов новой строки в качестве одного аргумента в cmdA
.Например, если у вас есть три обычных файла (здесь с необычными, но вполне допустимыми именами): * * / etc / passwd .jpg
, foo.txt
и
(где
означает символ новой строки), вывод find. -type f
( cmdB
) будет ./* * / etc / passwd .jpg
, поэтому cmdA
получит один аргумент ./* * / etc / passwd .jpg
.
Вероятно, это не то, что вам нужно. Вы бы хотели, чтобы cmdA
получал каждое имя файла как отдельные аргументы: ./* * / etc / passwd
, ./ foo.txt
и ./
.
Итак, по сути, вам нужно разделить вывод find
на отдельные имена файлов. В оболочках POSIX есть оператор для этого, оператор split + glob , который неявно вызывается, когда вы оставляете подстановку команды (или расширение параметра или арифметическое раскрытие) без кавычек.
cmdA $(cmdB)
разделит вывод cmdB
(без завершающих символов новой строки) на символы $ IFS
(по умолчанию пробел, табуляция и новая строка), а затем каждое слово будет подвергаться глобус.
В нашем примере выше это не то, что мы хотим. Это разделит ./* * / etc / passwd .jpg
на ./*
, *
, / etc / passwd
и .jpg
и те ./*
и *
будут перенесены в список файлов в текущем каталоге.
Мы хотим разделить символы новой строки, а не делать подстановку. Это сделано с помощью:
IFS='
' # newline only
set -f
cmdA $(cmdB)
Это все еще не работает для имен файлов, содержащих символы новой строки. Вывод find
обычно не подлежит последующей обработке, если вы не используете -print0
или вы не можете гарантировать, что в именах файлов не будет символов новой строки.
Теперь только zsh
позволяет разбивать на \ 0
символы:
cmdA ${(0)"$(cmdB)"}
разбивает "$ (cmdB)"
на последовательности символов NUL. Или:
IFS=$'\0' # no need for set -f in zsh
cmdA $(cmdB)
Другая проблема с подходами к подстановке команд заключается в том, что если cmdB
не работает и / или ничего не выводит, cmdA
все равно будет запущен (без аргументов). Этого можно избежать с помощью этого синтаксиса (все еще с zsh
):
cmdA ${$(find...):?no file}
Но если вы используете zsh
, вам обычно не нужно отказываться от всех этих проблем, поскольку zsh
поддерживает большую часть функций find
внутри. Например, вы должны использовать:
myalias ./**/*.jpg(.m-1)
Для отображения файлов jpg
, которые были изменены в последний раз за последние 24 часа.