Как я нахожу текст в файле и имею его, ищут несколько подпапок?

Принятие Вашего GUI основано на X (как почти все графический интерфейсы пользователя UNIX), использовать xinput.

Во-первых, перечислите свои устройства:

$ xinput --list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Windows mouse                             id=6    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
↳ Windows keyboard                          id=7    [slave  keyboard (3)]

Перечислите детали для своей мыши (id=6 в нашем примере):

$ xinput --list-props 6
Device 'Windows mouse':
    Device Enabled (112):   1
    Coordinate Transformation Matrix (114): 1.000000, 0.000000, 0.000000, 0.000000,   1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (222):     0
    Device Accel Constant Deceleration (223):       1.000000
    Device Accel Adaptive Deceleration (224):       1.000000
    Device Accel Velocity Scaling (225):    10.000000

Теперь отключите его:

$ export DISPLAY=:0
$ xinput set-int-prop 6 "Device Enabled" 8 0

Для включения его, сделайте:

$ xinput set-int-prop 6 "Device Enabled" 8 1

То же идет для клавиатуры, просто замените число международной опоры надлежащим идентификатором.
Протестированный и работал над cygwin.

Конечно, необходимо ли запланировать заранее, как Вы включите свои устройства снова. такой как расписание это на кроне, повторно включите его удаленно или отключите только одного из них в первом месте.

7
17.11.2011, 00:23
7 ответов
$ find . -type f -print0 | xargs -0 grep foo
$ grep -r foo . # GNU grep only

и в zsh с setopt extendedglob,

$ grep foo **/*(.)
15
27.01.2020, 20:13
  • 1
    Лучше: find . -type f -print0 | xargs -0 grep /dev/null foo, так, чтобы grep всегда печатает имя файла соответствия. Или find . -type f -exec grep /dev/null {} +, для реализаций, которые догнали POSIX.2004 (который исключает OpenBSD в данный момент). –  Gilles 'SO- stop being evil' 12.03.2011, 18:03
  • 2
    Все еще не может полагать, что нет более легкого способа сделать это. И я попробовал "grep-r", и это не работало. Почему это - только GNU grep только и почему не это в большем количестве систем? –  tooshel 14.03.2011, 23:51
  • 3
    Поскольку традиционный grep не имел его (идея состояла в том, что, если Вы хотели рекурсию, Вы использовали find с grep) и добавляя его после того, как факт к системам, которые работали в течение многих лет, мог повредить вещи. (GNU grep не ведет себя вполне тождественно к, например, System V grep.) –  geekosaur 14.03.2011, 23:58

Существует также ack, который специально разработан для этого вида задач и делает поиск подпапки автоматически.

5
27.01.2020, 20:13
  • 1
    Существует также ag который является путем быстрее, чем ack. удар лощины –  mmoya 15.11.2013, 14:29

Как альтернатива find | xargs ответы, Вы могли бы рассмотреть использование ctags, так как Вы говорите, что ищете не текст, а специально для имен функций.

Чтобы сделать это, Вы работали бы ctags против Вашего источника для создания a TAGS файл, и затем выполненный Ваш grep против TAGS файл, который выложит строки в следующем формате:

{tagname}<Tab>{tagfile}<Tab>{tagaddress}

Где tagname будет содержать имя функции, tagfile файл, это находится в, и tagaddress будет команда vi для получения до той строки. (Могло быть справедливое номер строки.)

(Есть ли простой способ сделать что-то похожее с различными индексами, которые затмевают сборки, или просто запрашивать базу данных затмения?)

2
27.01.2020, 20:13

что случилось с grep -r (== grep --recursive)? Я пропускаю что-то здесь?

(+1 для ack также - я регулярно использую обоих),

править: Я нашел превосходную статью, детализирующую возможности и ловушки, если Вы не имеете GNU grep здесь. Но, серьезно, если Вы не имеете GNU grep доступный, добираясь ack еще более настоятельно рекомендован.

1
27.01.2020, 20:13
  • 1
    Да, по-видимому, не у всех есть необычная версия grep. –  tooshel 14.03.2011, 23:54
  • 2
    @tooshel - не понял не-GNU grep не имеет той опции. обновленный мой :) –  simon 15.03.2011, 03:40
  • 3
    удар: ack: команда, не найденная –  tooshel 18.03.2011, 00:05
  • 4
    Хорошо, я прочитал инструкции установить ack... и я просто бросил его в / мусорном ведре, таким образом, все могут использовать его. Это было плохой идеей? –  tooshel 18.03.2011, 00:14
  • 5
    @tooshel: только если Вы не хотите, чтобы все смогли использовать его...! –  simon 18.03.2011, 04:52

find . | xargs grep перестанет работать на именах файлов с пробелами:

> echo test > "a b c"
> find . | xargs grep test
grep: ./a: No such file or directory
grep: b: No such file or directory
grep: c: No such file or directory

Обратите внимание, что даже-print0 имеет эту проблему.

Лучше, по-моему, использовать -exec grep с находкой, которая обработает все имена файлов внутренне и избежит этой проблемы:

> find . -exec grep test {} \;
test
>
0
27.01.2020, 20:13
  • 1
    find … -print0 | xargs -0 … справляется с произвольными именами файлов. Все POSIX.2004-совместимые реализации find позволить find … -exec … {} +, который вызывает команду с несколькими файлами сразу. Лучшая команда find . -type f -exec grep test /dev/null {} +; добавление /dev/null то, так, чтобы grep будет последовательно печатать имя файла, когда оно найдет соответствие. –  Gilles 'SO- stop being evil' 12.03.2011, 18:01

Если Ваши диски быстры, можно хотеть параллелизировать grep:

find . -type f -print0 | parallel -0 grep foo

Посмотрите вводное видео для получения дополнительной информации о Параллели GNU: http://www.youtube.com/watch?v=OpaiGYxkSuQ

0
27.01.2020, 20:13

$ find -type f -print0 | xargs -r0 grep foo

-r в xargs старается не выполнять команду, если там не был введен. Это - расширение GNU.

Существует также ag который специально предназначен для этого и пути лучше, чем ack. Это доступно в недавних версиях Debian/Ubuntu в пакете silversearcher-ag.

0
27.01.2020, 20:13

Теги

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