Eu tenho um diretório no qual muitos arquivos (cerca de 200) com o nome temp_log.$$
são criados com vários outros arquivos importantes que eu preciso verificar.
Como posso listar facilmente todos os arquivos e impedir temp_log.$$
que eles sejam exibidos?
Saída esperada
$ ls -lrt <exclude-filename-part>
-- Lists files not matching the above given string
Passei pela ls
página de manual, mas não encontrei nada nessa referência. Entre em contato se tiver perdido alguma informação vital aqui.
obrigado
ls --hide='temp_log.$$'
deve funcionar. Você também pode / deve estender isso com caracteres curinga, dependendo de qual parte de todo o termotemp_log.$$
é.Respostas:
Com o GNU
ls
(a versão no Linux e Cygwin não incorporados, às vezes também encontrados em outros lugares), você pode excluir alguns arquivos ao listar um diretório.(observe a forma longa de
-I
é--ignore='temp_log.*'
)Com o zsh, você pode deixar o shell fazer a filtragem. Passe
-d
parals
para evitar listar o conteúdo dos diretórios correspondentes.Com ksh, bash ou zsh, você pode usar a sintaxe de filtragem ksh. No zsh, execute
setopt ksh_glob
primeiro. No bash, executeshopt -s extglob
primeiro.fonte
-Itemp_log.*
sem espaço após o-I
-I
. No entanto, as*
necessidades devem ser citadas de uma maneira ou de outra.-I temp_log.*
não trabalha, mas-I 'temp_log.*'
,-I "temp_log.*"
,-I temp_log.\*
, etc. são muito bem.Você pode usar
grep
com a opção-v
.fonte
Você pode usar
find
para isso:Isso imprimirá apenas os nomes, você pode adicionar
-ls
para criar umals -l
saída de estilo com registro de data e hora e permissões, ou usar-exec ls {} +
para realmente passar para ls com as opções desejadas para colunas, classificação etc.Eu escrevi isso assumindo que eram apenas arquivos em um diretório. Se o diretório contiver outros diretórios, convém evitar listá-los recursivamente
E se você usar ls, deverá passar a opção -d para impedir que ela seja listada nos diretórios:
-exec ls -d {} +
fonte
-maxdepth 1
imitar não recursivols
.find
sem-maxdepth
devem procurar aqui .Eu acho que você deseja usar um recurso do shell, não de
ls
. Como uso o bash, verifiquei o que você desejaman bash
. Procure por "^ EXPANSÃO", (pressionando primeiro '/'). Excerto:Recentemente, comecei a excluir arquivos com base na primeira letra, com um comando como:
Isso corresponderia a qualquer coisa que não comece com a letra
t
. Se você adicionar mais caracteres entre colchetes, também excluirá os arquivos que começam com essas letras.Procurando por um link, e eu tenho um bom! Consulte Correspondência de padrões . A partir daí, isso funcionaria para o seu caso:
Isso requer que a
extglob
opção shell seja ativada usando oshopt
builtin (shopt -s extglob
), conforme declarado por Gilles .fonte
Apenas faça
fonte
grep
procura um padrão em um arquivo, e não no nome do arquivo.Como os arquivos que você NÃO deseja imprimir têm "temp_log". no nome do arquivo e filtre com grep:
NOTA: A outra postagem com uma resposta semelhante provavelmente recebeu votos negativos porque o usuário não incluiu aspas "" ao redor da string que o grep deveria estar procurando. Sem as aspas, ele não funciona como anunciado.
fonte
temp_log
. Esta não é uma boa maneira (geral) de excluirls
resultados.)-F
@ smokes2345; um período corresponderá a qualquer caractere em uma expressão regular básica. Veja: unix.stackexchange.com/q/119905/117549