Команда Linux для поиска и удаления файлов, содержащих заданный текст

/etc/cgconfig.conf содержит информацию о ваших группах управления. Никакого полезного содержимого по умолчанию нет. Поэтому пакет не поставляется с конфигурационным файлом в /etc.

Похоже, вы используете дистрибутив на базе Debian. Есть пример конфигурационного файла в /usr/share/doc/cgroup-tools/examples/cgconfig.conf (содержит только комментарии с примерами).

Вы можете узнать это, зная, что стандартное расположение файлов примеров в Debian - /usr/share/doc/имя пакета/examples/. Вы также можете узнать это, просмотрев файлы с именем cgconfig.conf (найти cgconfig.conf, как только индекс поисковой базы данных будет перестроен с момента установки пакета; обычно это происходит каждую ночь). Вы также можете узнать это, просматривая файлы пакета: dpkg -L cgroup-tools. На самом деле файлы находятся в пакете cgroup-tools, а не в cgroup-bin, потому что cgroup-bin - это пакет совместимости, который существует только для облегчения обновления, зависящего от cgroup-tools (это объясняется в описании пакета).

0
07.06.2019, 12:02
3 ответа

Команда

find . -maxdepth 1 -type f -exec grep -l  "string_to_be_searched" {} \;|awk '{print $1}'| sed "s/\.\///g"| awk '{print "rm -rvf" " " $1}'| sh

Примечание :Проверено, работает нормально

1
28.01.2020, 02:13
grep -FRl 'extract($_REQUEST)' | xargs rm -fv
  • grep-поиск текста в файлах.
  • -F-обрабатывать строку как есть, игнорировать возможные регулярные выражения.
  • -R-рекурсивный поиск.
  • -l-печатать только имена файлов.
  • xargs-передать результат следующей программе.
  • rm-удалить.
  • -f-заставить (не спрашивать "Вы уверены?" ).
  • -v-является необязательным, он выведет файлы, которые были удалены.

ОБНОВЛЕНИЕ:

Чтобы удалять только файлы с точным текстом, предлагаю также проверить количество символов в файле.

for i in $(grep -FRl 'extract($_REQUEST)'); do [[ $(cat $i | wc -c) == "19" ]] && rm -fv $i; done
  • wc -c-считает символы в файле. Поскольку приведенный вами пример(extract($_REQUEST))имеет длину 19 символов (, включая символ новой строки ), я использовал это число в своем примере, не стесняйтесь изменять его в соответствии с вашей ситуацией.
4
28.01.2020, 02:13
find . -maxdepth 1 -type f \
  -exec fgrep -q  'extract($_REQUEST)' '{}' ';' \ 
  -not -exec fgrep -vq  'extract($_REQUEST)' '{}' ';' \ 
  -delete
  • find .поиск в текущем каталоге
  • -maxdepth 1и без подкаталогов
  • -type fпоиск файлов
  • -execи для каждого выполнить этот тест
    • fgrepпростой строковый поиск
      • -qбез видимого выхода
      • 'extract($_REQUEST)'для этой строки
      • '{}'в файле, который вы нашли
      • ';'[конец выполнения]
  • -notне следующий тест
    • -execвыполнить снова
      • fgrepснова fgrep
        • -vqно на этот раз ищите не -совпадающие строки
        • 'extract($_REQUEST)'тот же образец для поиска
        • '{}'в файле
    • ';'[конец выполнения]
  • -deleteудалить их

Это работает, потому что exec также является тестом, и когда fgrep находит совпадение, тест завершается успешно и выполняется удаление. если grep возвращает false, удаление не выполняется.

5
28.01.2020, 02:13

Теги

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