Я не абсолютно уверен, что Вы спрашиваете. В первую очередь, mysql
команда является всем нижним регистром:
mysql DBname -uusername -ppassword <"path to the .sql file"
Кроме того, имя базы данных чувствительно к регистру, поэтому удостоверьтесь, что Вы имеете, это исправляет также.
Добавить путь к PATH
переменная среды, использовать
export PATH=$PATH:/path/to/add
где /path/to/add
путь, содержащий двоичный файл, который Вы хотите выполнить.
Но путь для клиентского исполняемого файла MySQL должен уже быть добавлен. Если Вы получили a command not found
ошибка, скорее всего, это - потому что Вы использовали прописные буквы на название команды.
Это решение работает, но я чувствую, что это неуклюже. Поиск первых 50 строк для струны "foobar":
$ for I in *.sql ; do echo $I && head -n 50 $I | grep foobar ; done
В цикле пути GNU sed
может выполнять и задачу:
for f in *.sql
do
sed -e '1 F' -e '51 Q' -e '/pattern/! d' "$f"
done
-121--66388- Можно ли это сделать? Возможно, но, вероятно, с большим количеством тайников и взломов sendmail, чем в PHP коде.
Однако, после нескольких раскопок, я обнаружил следующее: « Как я могу задержать доставку почты »
Недостатки заключаются в том, что вам придется иметь второй SMTP-сервер, работающий в режиме QUEUE, и вам все равно нужно будет изменить код, чтобы это сработало.
Таким образом, мое предложение состоит в том, чтобы создать небольшой php или javascript апплет, который по заданному расписанию (каждый день через cron), запрашивает базу данных для всех покупок, сделанных две недели назад, и отправить электронное письмо этому клиенту. Таким образом, можно использовать существующий сервер и не трогать код.
-121--145693-Напор, идущий в греп, доставляет вас на полпути.
head -50 filename | grep string
awk
(если предположить, что ваша реализация поддерживает оператор nextfile
] ) может сделать это довольно неплохо:
awk 'FNR > 50 { nextfile }; /foobar/ { print FILENAME ": " $0 }' ./*.sql
Первое оператор пропускает следующий файл после обработки 50 записей. Второй оператор печатает имя файла и соответствующую строку для любой строки, содержащей foobar
.
Если ваш awk
не имеет следующего файла
, этот вариант тоже работает, хотя я думаю, что он будет менее эффективным:
awk 'FNR <= 50 && /foobar/ { print FILENAME ": " $0 }' ./*.sql
В цикле таким же образом GNU sed
может выполнять и задачу :
for f in *.sql
do
sed -e '1 F' -e '51 Q' -e '/pattern/! d' "$f"
done