Команды UNIX - находят

Команды pvdisplay, vgdisplay и lvdisplay покажет Вам настроенные физические тома, группы объема и логические тома соответственно подсистемы LVM на машине. mdadm даст Вам информацию о настроенной подсистеме набега.

9
22.11.2018, 00:51
6 ответов

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

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

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

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

Это кратко как file- работы части:

  • -exec предикат выполняется sh -c 'file -b $0 | grep -q text' FILENAME для каждого FILENAME это удовлетворяет все предыдущие условия (тип, размер, неисполняемый файл).
  • Для каждого из тех файлов, оболочка (sh) запускает этот короткий скрипт: file -b $0 | grep -q text, замена $0 с именем файла.
  • file программа определяет тип контента каждого файла и производит эту информацию. -b опция предотвращает печать названия каждого протестированного файла.
  • grep фильтрует вывод, прибывающий из file программа, ища строки, содержащие "текст". (Лично убедитесь, как типичный вывод file команда похожа.)
  • Но grep не производит фильтрованный текст, потому что он имеет -q (тихая) опция дана. То, что это делает, является просто изменением его статус выхода к также 0 (который представляет "верный" - фильтрованный текст был найден) или 1 (значение "ошибки" - текст "текст" не появился в выводе от file).
  • Истинный/ложный статус выхода, прибывающий из grep передается далее sh кому: find и действия как конечный результат целого"-exec sh -c 'file $0 | grep -q text' {} \;"тест.
  • В случае, если вышеупомянутый тест возвратил true, -print команда выполняется (т.е. название протестированного файла печатается).
16
27.01.2020, 20:04
find . -type f -readable -size 1033c ! -executable

Обратите внимание, что я использовал c вместо b для размера файла. b для 512-байтовых блоков. c для фактических байтов.

8
27.01.2020, 20:04
  • 1
    я не думаю -readable означает человекочитаемый (т.е. не двоичный) –  hhaamu 16.07.2012, 12:04
  • 2
    @hhaamu - право. Однако это, вероятно, не плохо для отфильтровывания, регистрирует пользователя, не имеет никаких прав читать! Чтобы определить, содержит ли файл человекочитаемое содержание, передайте по каналу имена, возвращенные find кому: file. –  D_Bye 16.07.2012, 14:20
find . -readable -size 1033c \! -executable
0
27.01.2020, 20:04

все, что я написал, было:

find -size 1033c ! -executable

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

2
27.01.2020, 20:04

Думаю, для игры правильный синтаксис:

file./* 

Вы получаете ответ со списком того, из чего состоит каждый файл. Это сработало очень хорошо для того, чего вы пытаетесь достичь в игре Bandit. Настоящим поворотным моментом для этой задачи является то, что каждый файл начинается с дефиса-().

0
27.01.2020, 20:04

Я думаю, что это лучший фактический ответ, который охватывает все 3 условия

find inhere/ -type f -size 1033c ! -executable |xargs file | grep text

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

find inhere/ -type f -size 1033c 

вполне достаточно !

0
27.01.2020, 20:04

Теги

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