Можно ли игнорировать определенный файл или каталог в ls или подстановке файлов?

Можно ли игнорировать определенный файл или каталог в ls или подстановке файлов?

У меня возникли проблемы с использованием команды ls, подстановки файлов и команды grep. Рассмотрим следующее дерево файлов/каталогов.

abc/
    def
    ghi.txt
    jkl

def/
    f01
    abc
    abc.txt

ghi.txt

Предположим, если я хочу полностью игнорировать каталог abc/ и сообщать обо всем остальном. Попытка ls -lR -Iabc .сообщает о файле /def/abc.txt, но игнорирует файл /def/abc. Аналогично ls -lR . | grep -v abcздесь тоже не годится. Есть ли способ сделать то, что я хочу, в bash?

В качестве альтернативы предположим, что я хочу игнорировать ghi.txt, но сообщать abc/ghi.txt. Есть ли способ сделать это в bash?

решение1

В bash, если включена расширенная подстановка, то вы можете использовать !(abc) для обратного сопоставления каталога abc. Например, дано

$ tree
.
├── abc
│   ├── def
│   ├── ghi.txt
│   └── jkl
├── def
│   ├── abc
│   ├── abc.txt
│   └── f01
└── ghi.txt

2 directories, 7 files

и

$ shopt extglob
extglob         on

затем

$ ls !(abc)
ghi.txt

def:
abc  abc.txt  f01

Связанный контент