Как вывести список всех папок в каталоге, не начинающегося с символа L?

Вы можете использовать -C несколько раз (переход из одного каталога в другой):

tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5

Обратите внимание, что каждый - Параметр C интерпретируется относительно текущего каталога в этой точке (или вы можете просто использовать абсолютные пути).

1
01.02.2017, 01:16
3 ответа

Фактически, ls [L] * (что эквивалентно ls L * ) перечисляет файлы в текущем каталоге, которые сами не являются каталогами и чье имя начинается с L , и перечисляет содержимое подкаталогов текущего каталога, имя которого начинается с L . Чтобы вывести список файлов в текущем каталоге, которые не являются каталогами и имя которых начинается с L , вам необходимо передать параметр -d : ls -d L * .

Чтобы сопоставить файлы, имена которых не начинаются с L , вы можете использовать шаблон глобуса [^ L] (который также можно записать ] [! L] , для совместимости с другими оболочками). [^ L] соответствует любому символу, кроме L , поэтому [^ L] * соответствует именам файлов, которые начинаются с любого символа, кроме L . Поскольку имена файлов не могут быть пустыми, [^ L] * точно соответствует именам файлов, которые не начинаются с L .

В качестве альтернативы, если установлен параметр extended_glob (большинство пользователей помещают его в свои .zshrc ), вы можете использовать оператор ^ , чтобы отрицать совпадения: ^ L * соответствует именам файлов, которые не соответствуют L * , то есть именам файлов, которые не начинаются с L . Этот синтаксис специфичен для zsh.

3
27.01.2020, 23:11

Use ^:

ls [^L]*

делает то, что вам нужно - ну, предполагая, что ls [L]* соответствует тому, что вам нужно (он перечисляет все, что начинается с "L", а не только папки). В ответе

cuonglm показано, как ограничить список папками с помощью zsh.

6
27.01.2020, 23:11

То, что вы использовали, называется подстановкой , которая не может фильтровать каталог или файл в оболочках POSIX.

С zsh :

print -rl -- [^L]*(/)

Если вам нужны скрытые каталоги:

print -rl -- [^L]*(D/)

ПОЗИЦИОННО:

find . ! -name . -prune ! -name 'L*' -type d
5
27.01.2020, 23:11

Теги

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