Estoy tratando de ls
directorios que tienen .png
archivos dentro (sin necesidad de recursividad, aunque sería muy útil), excepto uno. Exluir un directorio, es decir
ls */*.png
funciona bien.
ls (^one)*/*.png
no devuelve stdout. ¿Cómo lo logro?
Estoy ciego y espeak
lo entiendo, así que solo puedo escuchar stdout por ahora.
one
(el patrón correcto sería^one/*.png
), imprimirá todo.Respuestas:
Opción 1 : usar solo
ls
:con el bash globing extendido activado (
shopt -s extglob
) puede hacer:Opción 2 : combinación
ls
ygrep
:Puedes combinar
ls
congrep -v
ls */*.png | grep -v "one/"
Opción 3 - (la mejor IMO) pero
find
no utilizals
:Para la búsqueda recursiva de todos los subdirectorios utilizando
find
Todas las líneas anteriores enumerarán directorios con
.png
archivos mientras filtran cualquier coincidencia de rutaone/
; solo la opción 3 hará esto de forma recursiva.fuente
find
comando no necesita decir-path "*/one/*"
o-path "./one/*"
?./phone/handset.png
?.png
s en un directorio llamadophone
? ¿Pensé que solo estábamos tratando de excluirone
?-not
, significa quefind
excluye los archivos en un directorio llamadophone
.En zsh , pon
setopt extended_glob
tu~/.zshrc
. Luego puede usar el patrón comodín^one
para excluir el directorio llamadoone
.Si desea recurrir a subdirectorios, utilícelo
**/
para el engrosamiento recursivo. Para excluir el directorio llamadoone
en el nivel superior, así como el directorio de nivel superior:Para excluir archivos en un subdirectorio llamado
one
, pero no archivos en subdirectorios:Para excluir archivos en un subdirectorio llamado
one
en cualquier nivel, use un patrón de repetición con el#
operador alrededor de la negación:fuente