Найдите файлы, удобные для чтения

Это вполне допустимая конфигурация, хотя вы можете упростить ее, используя DirectoryMatch или включаемый файл, поскольку код одинаков в каждом

<DirectoryMatch "^/var/www/html/(folder1|folder2)">
   ...
</DirectoryMatch>
14
30.09.2016, 17:09
8 ответов

Чтобы отфильтровать удобочитаемые имена файлов, вы можете использовать [: print:] ( печатное ) имя класса символов . Вы найдете больше о таких классах в руководстве для grep .

find . -type f -size 1033c -name "[[:print:]]*" ! -executable

С другой стороны, требование «удобочитаемости» может относиться к содержимому файла, а не к его имени. Другими словами, вы будете искать текстовые файлы. Это немного сложнее. Как предлагает @D_Bye в комментарии, вы должны затем использовать команду file , чтобы определить тип содержимого файла. Но запускать файл после канала было бы не очень хорошей идеей, потому что это усложнило бы задачу отображения имени файла. Вот что я предлагаю:

find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print

Вкратце, как работает file -part:

  • Предикат -exec выполняет sh -c 'file -b $ 0 | grep -q text 'FILENAME для каждого FILENAME , который удовлетворяет всем предыдущим условиям (тип, размер, неисполняемый).
  • Для каждого из этих файлов оболочка ( sh ) запускает этот короткий сценарий : file -b $ 0 | grep -q text , заменяя $ 0 именем файла.
  • Программа file определяет тип содержимого каждого файла и выводит эту информацию. Параметр -b предотвращает печать имени каждого проверенного файла.
  • grep фильтрует вывод, поступающий из программы файл , ища строки, содержащие «текст» . (Убедитесь сами, как выглядит типичный вывод команды file .)
  • Но grep не выводит отфильтрованный текст, потому что он имеет -q (тихий) вариант. Он просто меняет свой статус выхода либо на 0 (что означает «истина» - найден отфильтрованный текст), либо на 1 (что означает «ошибка» - текст ] "текст" не появился в выводе из файла ).
  • Истинный / ложный статус выхода, поступающий из grep , передается далее sh в find и действует как окончательный результат для всего » -exec sh -c 'file $ 0 | grep -q text' {} \; "test.
  • В случае, если вышеуказанный тест вернул истину , выполняется команда -print (т.е. печатается имя проверяемого файла).
0
27.01.2020, 19:50

Вам нужно только использовать:

find inhere -size 1033c

Это даст вам единственный файл, содержащий пароль.

2
27.01.2020, 19:50
bandit4@bandit:~$ ls
inhere

bandit4@bandit:~$ file inhere/*


inhere/-file00: data
inhere/-file01: data
inhere/-file02: data
inhere/-file03: data
inhere/-file04: data
inhere/-file05: data
inhere/-file06: data
inhere/-file07: ASCII text
inhere/-file08: data
inhere/-file09: data

bandit4@bandit:~$ pwd 

/home/bandit4

bandit4@bandit:~$ cat /home/bandit4/inhere/-file07

koReBOKuIDDepwhWk7jZC0RTdopnAYKh
bandit4@bandit:~$ 
0
27.01.2020, 19:50
du --human-readable | find -not -executable -size 1033c

получите ваш результат

-1
27.01.2020, 19:50
find. -size 1033c ! -executable -exec file {} +
2
27.01.2020, 19:50
find  -type f ! -executable -size 1033c

даст вам файл упражнения

0
27.01.2020, 19:50
find. -type f -size 1033c ! -executable | xargs file | grep text

Вентилятор одного вкладыша

0
27.01.2020, 19:50

Просто выполните следующее для содержимого каталога:

$ file -- *
-file00: data
-file01: data
-file02: data
-file03: data
-file04: data
-file05: data
-file06: data
-file07: ASCII text
-file08: data
-file09: data
$ cat -- \-file07
<output>
2
27.01.2020, 19:50

Теги

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