Как найти все .tex файлы в каталогах в Recurse Grep?

Duplicity может и восстанавливает разрешения и владельца ваших файлов / папок, как они были до резервного копирования. Для восстановления владельца должны быть выполнены два предварительных условия:

  1. Команда восстановления должна запускаться от имени пользователя root, так как только root может использовать chown .
  2. Пользователь с таким же именем должен существовать на целевой машине.

Во время процесса восстановления файлы и папки будут принадлежать пользователю root, но после его завершения Duplicity установит владельца для отражения оригинала, если вышеуказанные требования будут выполнены.

.. ede / duply.net

2
30.06.2016, 18:26
2 ответа

Думаю, это одна из самых глупых командных строк, которые я когда-либо придумал:

$ find . -type l -name "Math*" -print0 |
  xargs -0 -n 1 -IXXX find XXX/ -type f -name "*.tex" -print0 |
  xargs -0 fgrep "word"
  1. Найдите все символические ссылки, называемые Math * .
  2. Выполните снова найдите на каждом найденном пути, ища файлы *. Tex . xargs должен использовать -n 1 для вызова find с не более чем одним именем пути. Путь будет помещен в заполнитель XXX .
  3. Вызов fgrep (т.е. grep -F , поскольку у нас есть фиксированная строка поиска) со строкой для найденных файлов.
2
27.01.2020, 22:04

Один из способов сделать это:

find . -type l -name 'Math*' -print0 | \
xargs -0 sh -c \
    'find -L "$@" -type f -name "*.tex" -exec fgrep word /dev/null {} +' sh

sh -c '... 'sh мерзость необходима, чтобы иметь дело со случаем, когда Math * может иметь пробелы. В противном случае, когда Math * не расширяется до имен файлов с пробелами , будет работать что-то вроде этого:

find -L $(find . -type l -name 'Math*') -name '*.tex' \
    -exec fgrep word /dev/null {} +

/ dev / null гарантирует, что fgrep печатает имя файла, даже если для поиска требуется только один файл.

Если вы настаиваете на разрешении ссылок перед поиском с помощью grep, это тоже можно сделать за счет предположений, что (1) ваши имена файлов не содержат символов новой строки и (2) вы используете xargs из GNU findutils (BSD xargs не принимает -d ):

find . -type l -name 'Math*' -exec readlink -f {} + | \
xargs -d '\n' sh -c \
    'find "$@" -type f -name "*.tex" -exec fgrep word /dev/null {} +' sh
1
27.01.2020, 22:04

Теги

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