меньше команды исчерпывает память

find не берет его args от stdin, он берет их из командной строки, таким образом:

find . -iname "$(sed 's/ /\*/g' <<< ' foo bar baz ')"

Это станет:

find . -iname "foo*bar*baz*"

(кавычки необходимы, чтобы мешать оболочке развернуть подстановочный знак foo*bar*baz*),

который может или не может быть тем, что Вы надеялись получить. например, если бы Вы действительно хотели файлы, начинающиеся или с нечто, панели, или с baz, а не файлов, соответствующих скороговорке 'foo*bar*baz* то ', затем необходимо создать regexp и использование -regex или -iregex вместо -iname. или создайте более сложную команду находки как -iname 'foo*' -o -iname 'bar*' -o -iname 'baz*'

альтернативно:

PATTERN='foo bar baz'
PATTERN=$(echo "$PATTERN" | sed -e 's/ /*/g')
# and/or do whatever else you need to do to transform $PATTERN to be what
# you need it to be...
find . -iname "$PATTERN"

Вот острота в сценарии удара. это работает точно то же в сценарии, как это делает на командной строке.

$ cat ./test.sh
#! /bin/bash 
find . -iname "$(sed 's/ /\*/g' <<< ' foo bar baz ')"

$ ls -l
total 4
-rw-r--r-- 1 cas cas  0 Sep 26 16:53 doesntmatch
lrwxrwxrwx 1 cas cas 16 Sep 26 16:59 symlink -> xfoo-ybar-zbaz01
-rwxr-xr-x 1 cas cas 69 Sep 26 16:50 test.sh
-rw-r--r-- 1 cas cas  0 Sep 26 16:50 xfoo-ybar-zbaz01
-rw-r--r-- 1 cas cas  0 Sep 26 16:50 xfoo-ybar-zbaz02
-rw-r--r-- 1 cas cas  0 Sep 26 16:50 xfoo-ybar-zbaz03

$ ./test.sh 
./xfoo-ybar-zbaz01
./xfoo-ybar-zbaz03
./xfoo-ybar-zbaz02

$ find . -iname "$(sed 's/ /\*/g' <<< ' foo bar baz ')"
./xfoo-ybar-zbaz01
./xfoo-ybar-zbaz03
./xfoo-ybar-zbaz02

$ find . -iname "*foo*bar*baz*"
./xfoo-ybar-zbaz01
./xfoo-ybar-zbaz03
./xfoo-ybar-zbaz02
2
07.02.2014, 00:49
2 ответа

Это, вероятно, не имеет никакого отношения к Вашей памяти и всему, чтобы сделать с путем less записан и сколько места это выделяет, поскольку это - внутренние переменные.

Так или иначе, less действительно не разработан для этого, необходимо использовать инструмент как grep вместо этого:

grep yourQuery file

Если Вы хотите видеть строки вокруг своего запроса (5, например), выполнить это:

grep -C 5 yourQuery file

Если у Вас есть слишком много соответствий, для которых, можно передать вывод less и теперь необходимо смочь перерыть его:

grep -C 5 yourQuery file | less

Конечно, если Вы хотите сделать это вручную, можно открыть файл в текстовом редакторе. Любой серьезный редактор как vim или emacs сможет открыться и перерыть файл 100 МБ.

2
27.01.2020, 22:06
  • 1
    vim на самом деле Управление-c потребностями для показа содержания, не интуитивного, но это может обработать его. Я не знал grep -C опция - спасибо. –  Rumca 07.02.2014, 01:01
  • 2
    @Rumca ничто об энергии не интуитивно (превосходный, да, но не интуитивное), просто использует Вашего любимого редактора. –  terdon♦ 07.02.2014, 01:05
  • 3
    Да, я открыл огромные файлы в vi/emacs. Не у приятного впечатления... и редактора, еще более вероятно, закончится память, чем less (если Ваш думать об этом, структуры данных отслеживать изменения и позволять изменять файл обязаны быть более сложными и большими, чем требуемые только отслеживать текущую позицию). –  vonbrand 07.02.2014, 03:16

Вы должны стремиться запускать less без номеров строк, так как это обычный случай с большими файлами, less -n . Мне также нравится использовать поиск без учёта регистра, поэтому всегда: less -ni везде, где это возможно (например, в busybox'е по умолчанию less не поддерживает эти опции командной строки).

1
27.01.2020, 22:06

Теги

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