В вашем коде есть несколько ошибок:
Шаблон *.tex
будет расширен при вызове функции DO
, если он соответствует каким-либо именам файлов в текущем каталоге. При вызове функции вам нужно указать шаблон как '*.tex'
, "*.tex"
или \*.tex
.
ls
не требуется. У вас уже есть find
и grep
, которые могут сообщать пути к найденным файлам.
-name "$@"
работает правильно, только если "$@"
содержит один элемент. Лучше использовать -name "$1"
. Решение, позволяющее использовать несколько шаблонов, см. ниже.
Функция может быть записана
DO () {
# Allow for multiple patterns to be passed,
# construct the appropriate find expression from all passed patterns
for pattern do
set -- "$@" '-o' '-name' "$pattern"
shift
done
# There's now a -o too many at the start of "$@", remove it
shift
find. -type f '(' "$@" ')' -exec grep -qF 'TODO' {} ';' -print
}
Вызов этой функции как
DO '*.tex' '*.txt' '*.c'
заставит его выполнить
find. -type f '(' -name '*.tex' -o -name '*.txt' -o -name '*.c' ')' -exec grep -qF TODO {} ';' -print
Это сгенерирует список путей к файлам с этими суффиксами имен файлов, если файлы содержат строку TODO
.
Чтобы использовать grep
вместо find
для печати найденных путей, измените бит -exec... -print
на -exec grep -lF 'TODO' {} +
. Это будет эффективнее,особенно если у вас есть большое количество имен файлов, соответствующих заданному выражению (s ). В любом случае вам определенно не нужно использовать ls
.
Чтобы разрешить пользователю использовать
DO tex txt c
ваша функция может быть изменена на
DO () {
# Allow for multiple patterns to be passed,
# construct the appropriate find expression from all passed patterns
for suffix do
set -- "$@" '-o' '-name' "*.$suffix" # only this line (and the previous) changed
shift
done
# There's now a -o too many at the start of "$@", remove it
shift
find. -type f '(' "$@" ')' -exec grep -qF 'TODO' {} ';' -print
}
Моя проблема была решена после перезагрузки всего сервера. Перезапуск Apache не помог.
У меня была еще одна проблема, которая началась в то же время.... при загрузке по SFTP создавался файл нулевого размера, после чего передача файла не удавалась. Перезагрузка сервера также устранила эту проблему.
Так необъяснимо. Похоже на то, как он стал президентом:(