Используйте эту остроту
for i in *; do if [ ! -f $i ]; then echo "skipping $i"; else newname=`head -1 $i | sed 's/^\s*\([a-zA-Z0-9]\+\).*$/\1/'`; [ -n "$newname" ] && mv -i $i $newname.txt || echo "error at: $i"; fi; done
Это заменит все файлы первым словом в том файле + .txt
. Я определил первое слово, чтобы быть первым вхождением [a-zA-Z0-9]+
, отбрасывание ведущих пробелов.
Отказ от ответственности: Просто используйте его, если Вы уверены, что существует первое слово на строке один в каждом файле! Иначе Вы могли бы испытать неожиданные результаты ;-)
Вы смешиваете три команды: deamon
, perl
и /home/nuthan/program/server
без любых кавычек. Думайте о следующем: Как каждый из них знает, какой из параметров он должен интерпретировать?
Синтаксис, который Вы использовали, мог, вероятно, только быть правильно интерпретирован, если:
deamon
рассматривал бы все после -18
быть командой для выполненияperl
интерпретировал бы только первый параметр (/home/nuthan/program/server
) как сценарий для выполнения, и все, что следует как параметры, передало тому сценариюЯ могу предложить две вещи устранить проблемы:
perl
явно. Если server
сценарий содержит надлежащее объявление интерпретатора (вероятно, /usr/bin/perl
) на его первой строке, и это имеет исполняемый набор битов, Вы не должны должны быть явно звонить perl
.daemon
команда. Если это указывает что все после -18
(в Вашей команде), должен рассматриваться как полную команду для выполнения, затем она в порядке. Иначе Вам, возможно, или понадобилось бы ко всему, что следует в кавычках, или помещенный создают дополнительную функцию или сценарий обертки, который выполнил бы Вашу всю команду - так вся командная строка, которую Вы записали, был бы изменен на daemon -18 your_function
или daemon -18 /path/to/your/wrapper_script.sh
.daemon -18 perl /home/nuthan/program/server -d -v -r -f -O=/var/log/vts.log --daemon
RETVAL=$? 2>&1 1>/some/where/over_the_rainbow
Но обратите внимание на то, что похоже, что-O должен уже сделать это часть вида, как должен тот "демон", таким образом, могло быть больше ti это, чем кажется на первый взгляд.
Вы преодолели бы это путем перенаправления stdout
к пропасти (/dev/null
) и перенаправление stderr
туда, где stdout
перенаправляется. /dev/null
отбрасывания все это получает. Таким образом, что-то вроде этого могло работать:
daemon -18 perl /home/nuthan/program/server -d -v -r -f -O=/var/log/vts.log --daemon >/dev/null 2>&1
daemon -18 "perl /home/nuthan/program/server >/dev/null -d -v -r -f -O=/var/log/vts.log --daemon" 2>&1 1>/home/nuthan/program/vts.log &
Это хорошо работало. – nuthan 16.01.2012, 14:28