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/abc
arquivo. Da mesma forma ls -lR . | grep -v abc
também não é bom aqui. Existe alguma maneira de fazer o que eu quero no bash?
Alternativamente, suponha que eu queira ignorar, ghi.txt
mas 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 abc
diretó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