Поделиться папкой Windows 7 C с другим настольным компьютером Ubuntu Linux 15.10 Lenovo

Согласно документации ,

Обратите внимание, что -a , если он указан неявно (для например, два теста появляются без явного оператора между ними) или явно имеет более высокий приоритет, чем -o . Это означает, что находят. -name файл -o -name bfile -print никогда не будет печатать файл .

Таким образом, вы можете представить найти , заключив любые два "заключенных" выражения в круглые скобки по умолчанию. Ваш

find . -type f -name apple\* -o -name orange\*

интерпретируется как

find . \( -type f -name apple\* \) -o -name orange\*

1
08.02.2016, 12:17
1 ответ

Заставьте grep выполнить работу strings. Если у вас есть GNU grep, передайте опцию -z, чтобы заставить его читать записи, разделенные нулями, вместо записей, разделенных новыми строками. Это также приведет к совпадению в конце файла, но на практике все должно быть нормально.

find . -maxdepth 1 -type f -size +1M -print0 |
xargs -0 grep -Eoz '[[:print:]]{3,}$'

Если у вас нет утилит GNU, передайте файл через tr, чтобы поменять местами нулевые байты с новыми строками. Пока вы этим занимаетесь, сделайте tr отбрасывающим непечатаемые символы.

find . -type d -prune -o -type f -size +1024k -exec sh -c '
  for x; do
    <"$x" tr \\0\\n \\n\\0 | tr -dsC "[:print:]" \\n |
    grep ...
  done
' _ {} +
1
29.04.2021, 00:18

Теги

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