Eu quero encontrar todos os arquivos pelo tamanho dos nomes dos arquivos.
Por exemplo, se eu quiser encontrar arquivos de comprimento 1, tais como a.go
, b.go
.
Eu coloco:
grep '.\{1\}' file
Mas isso não funciona. Que comando posso usar para encontrar arquivos pelo tamanho do nome do arquivo?
a.go
é um nome de arquivo de comprimento 4.a
é um nome de arquivo de comprimento 1. Esse é o Unix, não o DOS, onde o nome e a extensão estavam separados e um implícito.
sempre fazia parte do nome do arquivo.Respostas:
grep
procura padrões no conteúdo dos arquivos. Se você quiser ver os nomes dos arquivos, basta usar um shell glob (se quiser considerar apenas os nomes de arquivos no diretório atual):(A propósito, é o shell que avalia a glob, não o
echo
comando.)Se você deseja procurar nos diretórios recursivamente, começando com o diretório atual, a ferramenta a ser usada é
find
:(Observe que você deve citar o padrão para impedir que o shell o avalie como um globo antes de
find
ser chamado.)fonte
Se você apenas deseja encontrar os nomes de arquivos, pode usar o seguinte comando:
Isso será executado
find
, retirando o nome do arquivo ou diretório usandobasename
e, em seguida, procure qualquer nome de arquivo ou diretório com pelo menos 100 caracteres. Se você quiser encontrar um nome de arquivo com o tamanho exato, use em{100}
vez de{100,}
.Se você deseja encontrar os nomes de arquivos, incluindo o caminho, faça o seguinte:
Isso retornará o nome do arquivo, incluindo o caminho relativo para onde você executou o comando find.
fonte
Primeiro de tudo,
grep
pesquisa no conteúdo dos arquivos, não procura nomes de arquivos. Para isso você querfind
. Ele não tem uma opção para definir o tamanho do nome do arquivo, mas você pode analisá-lo para obter o que deseja. Aqui estão alguns exemplos que eu executo em um diretório que contém os seguintes arquivos:A busca por arquivos nesse diretório retorna:
Portanto, para encontrar os arquivos com um comprimento X, precisaremos remover o caminho e corresponder apenas aos caracteres após o último
/
:O
sed
comando apenas remove o./
. O-P
sinalizador ativa expressões regulares compatíveis com Perl, necessárias para o{n}
que é uma coisa PCRE e os$
meios "coincidem com o final da string".Você também pode simplesmente fazer isso:
Isso é bom para pequenos números digitando 15 pontos para coincidir com nomes de arquivos com comprimento 15 não é muito eficiente.
Por fim, se você deseja ignorar a extensão e corresponder apenas ao nome do arquivo, faça o seguinte (como sugerido pelo @slm):
No entanto, isso também encontrará arquivos como
a.bo.go
. É melhor se seus nomes de arquivos puderem conter mais de um.
:NOTA: A solução acima pressupõe que você tenha nomes de arquivos relativamente sãos que não contenham novos caracteres de linha etc. Também será considerado não ignorar espaços nos nomes de arquivos ao calcular o comprimento que pode não ser o desejado. Se algum destes problemas for um problema, informe-me e atualizarei minha resposta.
fonte
Você não especifica, mas se os arquivos estiverem em uma estrutura de diretórios, poderá usar
find
para localizar arquivos com o comprimento 1, com a ajuda degrep
:Exemplo
fonte
ggrep
: heystephenwood.com/2013/09/install-gnu-grep-on-mac-osx.html . Perceba também que este Q não foi marcado como OSX, portanto, o uso degrep
é adequado.Eu usaria algo assim.
Então, se você colocar dois "?" então você está procurando nomes de arquivos com dois caracteres e a extensão.
fonte
Quando você deseja usar a expressão regular no comando find, use
""
como:para o seu caso, use:
Você deve substituir seu caminho real por yourpath,
-a
significaAnd
-type f
significa que você está procurando apenas arquivos regulares.?
na sua consulta significa um caractere como o DOS, se você se lembra.fonte
ls ?.*
deve fornecer os resultados desejados.fonte