подстановка имени файла & mdash; Есть ли что-то, чтобы убедиться, что это не определенные буквы?

Что такое команда для получения имени файла с любым символом, кроме нескольких?

Скажите, я не хочу, чтобы имя файла содержало буквы q и Q

ls [^ qQ] не работает. Что бы я сделал?

0
задан 29 September 2013 в 03:50

3 ответа

Если вы хотите использовать глобирование (это не всегда хорошая идея), вы можете использовать:

$ ls -d !(*[qQ]*)

или с shopt -s nocaseglob:

$ shopt -s nocaseglob
$ ls -d !(*q*)

-d опция, чтобы не отображать содержимое совпавших каталогов.

Чтобы это работало, у вас должно быть установлено extglob, это, вероятно, имеет место по умолчанию. Если нет, то подойдет shopt -s extglob.

Лучшим подходом было бы использовать find , так как вы сможете -exec кое-что найти в подходящих файлах, если вам нужно (переименовать, grep , edit, и т. д.), и вы будете гораздо лучше контролировать то, что вам нужно. Пример:

$ find . -maxdepth 1 \! -iname '*q*' -type f

Это найдет все файлы (-type f) в текущем каталоге (.), а не в подкаталогах (-maxdepth 1), у которых (\!) нет [ 1115] q или Q в их названии (-iname '*q*').

Если у вас огромное количество файлов, найти лучше и быстрее, чем сглаживание Bash , и не будет превышать максимальное количество аргументов.

Надеюсь, это поможет!

0
ответ дан 29 September 2013 в 03:50

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

$ touch aQq qwerty uiop asdfg bnmq
$ 
$ ls
aQq  asdfg  bnmq  qwerty  uiop

затем

$ ls !(*[qQ]*)
asdfg  uiop

тогда как

$ ls *[qQ]*
aQq  bnmq  qwerty

Можно проверить текущее значение extglob использования опции shopt -p extglob и набор это с shopt -s extglob. Ввести help shopt в ударе запрашивают больше информации.

0
ответ дан 29 September 2013 в 03:50

Почему не просто

ls | grep -v [qQ]

Если вместо отдельных символов Вы хотите исключить имена файлов, содержащие определенные строки символов, Вы могли бы сделать так с

ls | grep -v "str1\|str2\|..."

т.е. разделяя любую строку с завершенным символом канала | (который действует как "ИЛИ" логический оператор). Не забудьте включать его в двойные кавычки для предотвращения специальных символов, которые будут неправильно истолкованы.

0
ответ дан 29 September 2013 в 03:50

Другие вопросы по тегам:

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