“grep-r нечто *” по сравнению с “grep-r нечто”.

Запишите маленький сценарий обертки, который использует date управляйте и называет Вашу команду резервного копирования.

#!/bin/bash
NOW=`/bin/date +"%m%d%Y-%H%M%S"`
if [[ "$?" != "0" ]]; then
 NOW="UNKNOWN_DATE"
 fi
mysqldump -u username -ppassword database > /path/to/file/$NOW.sql
if [[ "$?" != "0" ]]; then
 echo "$0: backup failed with error code $?"
 fi
10
04.01.2013, 11:15
2 ответа

grep -r foo * не ищет соответствия в скрытых файлах или каталогах, также * расширен оболочкой, таким образом, Вы могли бы закончить со Списком аргументов слишком длинная ошибка, когда существует много записей в текущем каталоге, или некоторые другие ошибки или недостойное поведение, если название некоторых файлов или каталогов запускается с символа тире.

Вызов grep -r foo . не имеет вышеупомянутых дефектов

Обновленный:

Другое различие: в странице справочника (@fedora17) grep говорится:

-r, --recursive
    Read all files under each directory, recursively, following symbolic links only if they
    are on  the  command  line.  ...

Будет также различие при выполнении этой команды в пустом каталоге:

$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$
15
27.01.2020, 20:00

При использовании звездочки Вы не можете соответствовать файлам в каталогах, как имя которых запускаются с точки, .cache.

Обновление:

Это вызвано тем, что * расширен оболочкой перед вызовом grep, таким образом, это получает список имен вместо единственного имени каталога (для тока .). Путем оболочка расширяется, шаблон может быть настроен с параметром оболочки (что касается nullglob, nocaseglob или другой bash опции) или быть переменными среды (как LANG или LC_ALL)

4
27.01.2020, 20:00

Теги

Похожие вопросы