LINUX.ORG.RU

Как найти файл?

 ,


1

2

Что известно: это текстовый файл, но расширения .txt нету (скорее всего), он создан после определенной даты, он содержит в своем теле строчку с определенным словом, и он не скрытый.

И он находится на винте для бекапов, размеченном в ext4 с кучей других файлов, ибо винт на 2 терабайта.

Как вывести список всех файлов, что удовлетворяют этим условиям?

★★★★★

Последнее исправление: Vsevolod-linuxoid (всего исправлений: 2)

Ищи с помощью find с условиями о типе файла (файл), о дате изменения (не позже чем) и выполнением команды grep -H по строчке.

Yorween
()
Ответ на: комментарий от Yorween

А, точно, у grep же есть -H

И ещё нужно добавить ограничение на размер — текстовый не должен весить много. Но нет ли возможности добавить ограничение на тип? Не файл или директория, а именно на текстовый файл?

Vsevolod-linuxoid ★★★★★
() автор топика
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

С помощью -type f:

 -type c
              File is of type c:
              b      block (buffered) special
              c      character (unbuffered) special
              d      directory
              p      named pipe (FIFO)
              f      regular file
              l      symbolic link; this is never true if the -L option or the -follow
option is in effect, unless the symbolic link is broken.  If you want to search for
symbolic links when -L is in effect, use -xtype.
              s      socket
              D      door (Solaris)
Yorween
()
Ответ на: комментарий от Yorween

Так, ты не понял вопроса? Я не спрашивал о типе файла с точки зрения файловой системы. Для неё и текст, и музыка, и видео — regular file. Я спросил о типе содержимого — чтобы grep запускался только на текстовых файлах.

Vsevolod-linuxoid ★★★★★
() автор топика
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

Я не спрашиваю о типе файла с точки срения файловой системы.

Тогда вначале вам надо СЕБЕ формализовать условие поиска. Вы же на компьютере с детерминированной логикой запускаете скрипт, а не умнее себя с AI. Вот уже тогда...

vodz ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Понял, просто ты поправил пост позже и я не увидел. Например, так:

find -type f -size -10M -ctime -1 -exec grep -HI '123' '{}' \;

Тип - файл, размер до 10 мегабайт, дата создание не позже 24 часов, греп с выводом имени файла и игнорированием бинарных файлов.

Yorween
()
Ответ на: комментарий от vodz

OK, вот точные критерии — этот файл имеет тип содержимого ACSII text или UTF-8 Unicode text, он создан после 15 ноября 2018 года, он не является скрытым, он содержит в себе строчку со словом rhel в неизвестном регистре.

Vsevolod-linuxoid ★★★★★
() автор топика
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)

Прочитать все 2 терабайта не так и долго, не страдай хернёй. Это даже не 200 терабайт.

anonymous
()
Ответ на: комментарий от Vsevolod-linuxoid

вот точные критерии — этот файл имеет тип содержимого ACSII text

Тогда не сложно, команда file на этот файл это точно распознает.

он создан после 15 ноября 2018 года, он содержит в себе строчку со словом rhel

Это вам уже насчёт опций в find и grep уже объяснили.

Остальное уже в job.

vodz ★★★★★
()
Ответ на: комментарий от bass

А почему так сложно? Кроме того, xargs может получить переполнение строки аргументов, если файлов будет много.

find . -type f -newermt 2018-11-15 -size -100k | xargs -n1000 grep -iH rhel
Deleted
()
Ответ на: комментарий от Deleted

потому что мой вариант удовлетворяет условиям, а твой нет.

bass ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.