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
Это, вероятно, не имеет никакого отношения к Вашей памяти и всему, чтобы сделать с путем less
записан и сколько места это выделяет, поскольку это - внутренние переменные.
Так или иначе, less
действительно не разработан для этого, необходимо использовать инструмент как grep
вместо этого:
grep yourQuery file
Если Вы хотите видеть строки вокруг своего запроса (5, например), выполнить это:
grep -C 5 yourQuery file
Если у Вас есть слишком много соответствий, для которых, можно передать вывод less
и теперь необходимо смочь перерыть его:
grep -C 5 yourQuery file | less
Конечно, если Вы хотите сделать это вручную, можно открыть файл в текстовом редакторе. Любой серьезный редактор как vim
или emacs
сможет открыться и перерыть файл 100 МБ.
Вы должны стремиться запускать less без номеров строк, так как это обычный случай с большими файлами, less -n . Мне также нравится использовать поиск без учёта регистра, поэтому всегда: less -ni везде, где это возможно (например, в busybox'е по умолчанию less не поддерживает эти опции командной строки).
vim
на самом деле Управление-c потребностями для показа содержания, не интуитивного, но это может обработать его. Я не зналgrep -C
опция - спасибо. – Rumca 07.02.2014, 01:01vi
/emacs
. Не у приятного впечатления... и редактора, еще более вероятно, закончится память, чемless
(если Ваш думать об этом, структуры данных отслеживать изменения и позволять изменять файл обязаны быть более сложными и большими, чем требуемые только отслеживать текущую позицию). – vonbrand 07.02.2014, 03:16