Você não deve analisar a saída de ls
. Em vez disso, use find
numbzip=$(find -iname "*.zip" | wc -l)
echo $numzip
Estou usando este código:
numbzip='ls *.plt.zip | wc -l' &>/dev/null
e tentando se livrar da saída na janela de comando.
Não existem arquivos terminados em .plt.zip, então ele retorna:
ls: cannot access *.plt.zip: No such file or directory
qualquer tentativa eu sempre escrevo esta linha na janela de comando.
Eu tentei:
numbzip='ls *.plt.zip | wc -l' >/dev/null 2>/dev/null
numbzip='ls *.plt.zip | wc -l' >/dev/null >>/dev/null 2>/dev/null
Atenciosamente, Wilco.
Você não deve analisar a saída de ls
. Em vez disso, use find
numbzip=$(find -iname "*.zip" | wc -l)
echo $numzip
Você continua vendo a mensagem porque está redirecionando a coisa errada:
numbzip='ls *.plt.zip | wc -l' &>/dev/null
Isso redireciona o stderr da atribuição de variável, não do comando ls
. Você está executando o ls
dentro do ''
e redirecionando para fora dele. Para redirecionar a saída de erro de ls
, use:
numbzip='ls *.plt.zip 2>/dev/null | wc -l'
Dito isto, enquanto o acima irá funcionar para nomes de arquivo simples, ele falhará se seus nomes de arquivo contiverem novas linhas. Como regra geral, você deve evitar analisar a saída de ls
. Você pode usar o shell globbing em vez disso:
zipfiles=( *.plt.zip )
echo ${#zipfiles[@]}
O primeiro comando criará a matriz zipfiles
cujo conteúdo é todo o arquivo / diretório correspondente ao glob *.plt.zip
. A segunda linha imprime o número de elementos na matriz.
Tags cygwin