Estou tentando procurar todos os XML
arquivos em um diretório específico e todos os subdiretórios (recursivamente) dentro dele.
ls -R *.xml
está listando apenas arquivos no diretório atual. Tenho certeza de que as próprias subpastas têm vários .xml
arquivos, mas nenhum está aparecendo.
Isso é um problema de configuração?
ls -R | grep .xml
Respostas:
Tente usar Localizar
fonte
find
excessols -R
?find
egrep
, quando éfind
possível filtrar usando regexes e globs, e não usarfind
's-print0
e grep's-z
quando você precisa misturar.Você pode fazer isso apenas com localização :
.
é o diretório atual. Se você precisar procurar em outro diretório, substitua.
pelo caminho do diretório.fonte
.php
arquivos no diretório atual. Mas ele retornou apenas.php
arquivos no diretório atual, não pesquisou recursivamente nos subdiretórios. É por isso que estou perguntando se ofind
comando procura recursivamente ou não.find
comando pesquisa recursivamente. Se você não citar o parâmetro, acho que seu shell pode fazer uma expansão no*
, portanto, ele corresponderá aos arquivos no diretório atual.Tente este comando:
ls
não tem opções para filtrar a saída. Para isso você precisaria usar cachimbo. Isso passa a saída dels
paragrep
, que os filtra para mostrar apenas os.xml
arquivos.fonte
ls
?bater
Usando a
globstar
opção shell, podemos fazer uso de globbing recursivo./**/*
Perl
O Perl possui um módulo
Find
que permite a travessia recursiva da árvore de diretórios. Dentro dafind()
função especial , podemos definir uma sub-rotina desejada e o diretório que queremos percorrer, neste exemplo, é isso.
. O one-liner nesse caso seria:Pitão
Enquanto o Perl tem um módulo inteiro dedicado à passagem de árvore recursiva, o Python tem uma função elegante
walk()
que faz parte doos
módulo e retorna repetidamente a tupla do caminho superior, lista de todos os subdiretórios e lista de nomes de arquivos. Podemos fazer o seguinte:Isso pode ser muito mais limpo como um script:
encontrar
Outras respostas foram mencionadas
find
para a travessia recursiva, e essa é a ferramenta essencial para o trabalho. O que precisa ser mencionado é o fato defind
haver várias opções de linha de comando, como-printf
imprimir a saída no formato desejado,-type f
encontrar apenas arquivos regulares,-inum
pesquisar pelo número do inode,-mtime
pesquisar pela data da modificação,-exec <command> {} \;
executar um comando específico para processar o arquivo com a passagem do arquivo como argumento (onde{}
é ofind
espaço reservado padrão para o arquivo atual) e muitos outros, por isso, leia a página de manualfind
.fonte