Não há propriedade em um arquivo que indique que ele está oculto. As primeiras versões do Unix tinham um comando ls que ocultava arquivos cujo nome começa com . (“arquivos de ponto”) e essa tradição ficou. O comando ls , por padrão, oculta arquivos cujo nome começa com . e mostra todos os outros arquivos.
Alguns gerenciadores de arquivos gráficos ocultam arquivos cujo nome começa com . , como ls , porque é o que muitos usuários esperam. O Gnome lançou uma nova convenção, que é a de que os diretórios podem conter um arquivo chamado .hidden , que contém uma lista de arquivos a serem ocultados (um nome de arquivo por linha, nenhum padrão permitido).
Você não mencionou qual gerenciador de arquivos usou, é possível que ele tenha regras diferentes para ocultar arquivos. Se opencv.sh~ estiver oculto, isso segue regras decididamente não padronizadas, portanto você não pode reclamar legitimamente que ls não está seguindo essas regras fora do padrão.
Adicionar ~ no final de um nome de arquivo é a convenção para um arquivo de backup. Ou seja, opencv.sh~ é uma versão anterior de opencv.sh , criada pelo seu editor quando você salvou opencv.sh .
A versão GNU de ls suporta uma opção -I para ignorar padrões extras (além de arquivos de ponto). Se você quiser ocultar os arquivos de backup de ls , poderá criar um alias que adicione -I "*~" às opções ls :
alias ls='ls -I "*~"'
(mais qualquer outra opção desejada, por exemplo, alias ls='ls -I "*~"' --color para usar cores para indicar tipos de arquivo). Coloque essa linha no seu .bashrc , .zshrc ou qualquer outro arquivo de inicialização usado pelo seu shell.