Tengo problemas para usar el comando ls, la globalización de archivos y el comando grep. Considere el siguiente árbol de archivos/directorios.
abc/
def
ghi.txt
jkl
def/
f01
abc
abc.txt
ghi.txt
Supongamos que quiero ignorar por completo el directorio abc/ e informar todo lo demás. Al intentarlo, ls -lR -Iabc .
se informa el archivo /def/abc.txt pero se ignora el /def/abc
archivo. Del mismo modo ls -lR . | grep -v abc
tampoco sirve aquí. ¿Hay alguna manera de hacer lo que quiero en bash?
Alternativamente, supongamos que quiero ignorar ghi.txt
pero informar abc/ghi.txt
. ¿Hay alguna manera de hacer esto en bash?
Respuesta1
En bash, si está habilitado el globbing extendido, entonces podría usar !(abc) para hacer una coincidencia inversa del abc
directorio. Ex. dado
$ tree
.
├── abc
│ ├── def
│ ├── ghi.txt
│ └── jkl
├── def
│ ├── abc
│ ├── abc.txt
│ └── f01
└── ghi.txt
2 directories, 7 files
y
$ shopt extglob
extglob on
entonces
$ ls !(abc)
ghi.txt
def:
abc abc.txt f01