Допустим, у меня есть каталог с файлами a1, a2, a3, b1, b2, b3. Я хочу только сопоставлять файлы, которые начинаются с, a
но не содержат 3
. Я пытался, ls -I "*3" *a*
но это возвращается a1 a2 a3
, хотя я не хочу, чтобы это соответствовало a3
. Это возможно с ls
?
12
do not list implied entries matching shell PATTERN
однако она не объясняет, что подразумевается под подразумеваемым , но я предполагаю, что она применима только к файлам,ls
получаемым с помощью глобальных расширений - иls
не раскрываетa*
, оболочка делает это ,Ответы:
Только:
shopt -s extglob
активирует расширенное сглаживание.a
соответствует стартуa
!()
отменяет матч внутри()
...*3*
который есть3
и что-нибудь до или после него.источник
set -s extglob
В существующих ответах хорошо изложен лучший способ сделать это с помощью шариков; Я включу это, потому что в большинстве случаев
find
это лучший вариант, если вы хотите выполнить сценарии или дальнейшую обработку:Вы можете передать ответ
xargs
для простых действий илиwhile read
цикл для более сложных вещей.источник
Простой способ
a*
3
Команда UNIX
ls -1
показывает один файл в строке.grep
обычно находит строки, которые соответствуют шаблону, но при-v
этом поведение инвертируется, то есть grep находит строки, которые не соответствуют этому шаблону.источник
ls
не является идеей goob: mywiki.wooledge.org/ParsingLsС
zsh
помощью~
оператора glob :При этом
gnu
ls
вы можете использовать два--ignore
варианта:первый игнорирует все имена файлов, которые не начинаются с,
a
а второй игнорирует имена файлов, которые содержат3
источник