É possível ignorar um arquivo ou diretório específico em ls ou globbing de arquivos?

É possível ignorar um arquivo ou diretório específico em ls ou globbing de arquivos?

Estou tendo problemas para usar o comando ls, globbing de arquivos e o comando grep. Considere a seguinte árvore de arquivos/diretórios.

abc/
    def
    ghi.txt
    jkl

def/
    f01
    abc
    abc.txt

ghi.txt

Suponha que eu queira ignorar completamente o diretório abc/ e relatar todo o resto. Tentar ls -lR -Iabc .relata o arquivo /def/abc.txt, mas ignora o /def/abcarquivo. Da mesma forma ls -lR . | grep -v abctambém não é bom aqui. Existe alguma maneira de fazer o que eu quero no bash?

Alternativamente, suponha que eu queira ignorar, ghi.txtmas reportar abc/ghi.txt. Existe alguma maneira de fazer isso no bash?

Responder1

No bash, se o globbing estendido estiver habilitado, você poderá usar !(abc) para fazer a correspondência inversa do abcdiretório. Ex. dado

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

2 directories, 7 files

e

$ shopt extglob
extglob         on

então

$ ls !(abc)
ghi.txt

def:
abc  abc.txt  f01

informação relacionada