Здесь можно перечислить все файлы, соответствующие шаблону в bash:
ls *.jar
Как перечислить дополнение шаблона? то есть все файлы, не соответствующие *.jar?
Здесь можно перечислить все файлы, соответствующие шаблону в bash:
ls *.jar
Как перечислить дополнение шаблона? то есть все файлы, не соответствующие *.jar?
ls | grep -v '\.jar$'
например.
Используйте расширенное сопоставление шаблонов в стиле egrep.
ls !(*.jar)
Это доступно, начиная с bash -2.02-alpha1. Сначала нужно включить с помощью
shopt -s extglob
По состоянию на bash -4.1-alpha есть опция конфигурации, чтобы включить это по умолчанию.
Малоизвестное правило расширения bash:
ls !(*.jar)
POSIX определяет несогласованные выражения скобок, поэтому мы можем позволить оболочке расширять имена файлов для нас.
ls *[!j][!a][!r]
У этого есть некоторые причуды, но, по крайней мере, он совместим с любой оболочкой unix.
С соответствующей версией find
вы можете сделать что-то подобное, но это немного перебор:
find . -maxdepth 1 ! -name '*.jar'
find
находит файлы. Аргумент .
указывает, что вы хотите начать поиск из .
, то есть текущего каталога. -maxdepth 1
говорит, что вам нужно искать только один уровень, т.е. текущий каталог. ! -name '*.jar'
ищет все файлы, не соответствующие регулярному выражению *.jar
.
Как я уже сказал, это немного переборщило для этого приложения, но если вы удалите -maxdepth 1
, вы сможете рекурсивно искать все файлы, отличные от jar, или то, что вам легко.
Одним из решений было бы ls -1|grep -v '\.jar$'
И если вы хотите исключить более одного расширения файла, разделите их на канал |
, например ls test/!(*.jar|*.bar)
. Попробуем:
$ mkdir test
$ touch test/1.jar test/1.bar test/1.foo
$ ls test/!(*.jar|*.bar)
test/1.foo
Глядя на другие ответы, вам может понадобиться shopt -s extglob
.
Если ваш ls
поддерживает это (man ls
), используйте --hide=<PATTERN>
. В твоем случае:
$> ls --hide=*.jar
Не нужно анализировать вывод ls
(потому что он очень плохой), и он масштабируется, чтобы не показывать несколько типов файлов. В какой-то момент мне нужно было увидеть, какие не исходные, необъектные, не сгенерированные libtool файлы находились в (загроможденном) каталоге:
$> ls src --hide=*.{lo,c,h,o}
Работал как шарм.
Другим подходом может быть использование флага ls -I
(Ignore-pattern).
ls -I '*.jar'