Estoy tratando de lsdirectorios que tienen .pngarchivos 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 espeaklo 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
lsygrep:Puedes combinar
lscongrep -vls */*.png | grep -v "one/"Opción 3 - (la mejor IMO) pero
findno utilizals:Para la búsqueda recursiva de todos los subdirectorios utilizando
findTodas las líneas anteriores enumerarán directorios con
.pngarchivos mientras filtran cualquier coincidencia de rutaone/; solo la opción 3 hará esto de forma recursiva.fuente
findcomando no necesita decir-path "*/one/*"o-path "./one/*"?./phone/handset.png?.pngs en un directorio llamadophone? ¿Pensé que solo estábamos tratando de excluirone?-not, significa quefindexcluye los archivos en un directorio llamadophone.En zsh , pon
setopt extended_globtu~/.zshrc. Luego puede usar el patrón comodín^onepara excluir el directorio llamadoone.Si desea recurrir a subdirectorios, utilícelo
**/para el engrosamiento recursivo. Para excluir el directorio llamadooneen 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
oneen cualquier nivel, use un patrón de repetición con el#operador alrededor de la negación:fuente