Вы можете использовать -C
несколько раз (переход из одного каталога в другой):
tar czvf archive.tar.gz -C /home/martin/cvs/ops/cisco/b s1 s2 -C ../../extreme/b r3 -C ../../j/b r5
Обратите внимание, что каждый - Параметр C
интерпретируется относительно текущего каталога в этой точке (или вы можете просто использовать абсолютные пути).
Фактически, 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.
То, что вы использовали, называется подстановкой , которая не может фильтровать каталог или файл в оболочках POSIX.
С zsh
:
print -rl -- [^L]*(/)
Если вам нужны скрытые каталоги:
print -rl -- [^L]*(D/)
ПОЗИЦИОННО:
find . ! -name . -prune ! -name 'L*' -type d