Eu estou tentando ls
dirs que possuem .png
arquivos dentro (não há necessidade de recursividade, embora seria mais útil), exceto um. Excluir um diretório, ou seja,
ls */*.png
funciona bem.
ls (^one)*/*.png
não retorna stdout. Como faço para conseguir isso?
Eu sou cego e canalizá-lo espeak
, então só posso ouvir stdout por enquanto.
one
(o padrão correto seria^one/*.png
); imprimiria tudo.Respostas:
Opção 1 - usando apenas
ls
:Com os globos bash estendidos ativados (
shopt -s extglob
), você pode:Opção 2 - combinação
ls
egrep
:Você pode combinar
ls
comgrep -v
ls */*.png | grep -v "one/"
Opção 3 - (a melhor IMO), mas
find
não usals
:Para pesquisa recursiva de todos os subdiretórios usando
find
Todos os one-liners acima listarão diretórios com
.png
arquivos enquanto filtram qualquer caminho correspondenteone/
; somente a opção 3 fará isso recursivamente.fonte
find
comando não precisa dizer-path "*/one/*"
ou-path "./one/*"
?./phone/handset.png
?.png
s em um diretório chamadophone
? Eu pensei que estávamos apenas tentando excluirone
?-not
, isso significa que elefind
exclui arquivos em um diretório chamadophone
.No zsh , coloque
setopt extended_glob
no seu~/.zshrc
. Em seguida, você pode usar o padrão curinga^one
para excluir o diretório chamadoone
.Se você deseja recursar em subdiretórios, use
**/
para globbing recursivo. Para excluir o diretório chamadoone
no nível superior, bem como o diretório de nível superior:Para excluir arquivos em um subdiretório chamado
one
, mas não arquivos em subdiretórios:Para excluir arquivos em um subdiretório chamado
one
em qualquer nível, use um padrão de repetição com o#
operador em torno da negação:fonte