Tenho um diretório onde independente do usuário ou das opções selecionadas, gostaria que sempre mostrasse os arquivos ocultos.
Eu sei que a -a
opção mostrará arquivos ocultos. Eu só quero automatizar a decisão sobre o uso da opção.
Digamos que estou em/home/user, não me importo em ver os arquivos ocultos, mas se estiver em/filestoprcess quero ver os arquivos ocultos.
Este tipo de funcionalidade existe?
Responder1
A maneira mais fácil de fazer isso seria criar um alias de shell que mapeasse para uma função. Digamos que estamos usando o bash e adicione o seguinte alias ao seu .bashrc
:
alias ls=ls_mod
Agora adicione a ls_mod
função abaixo:
ls_mod () {
DIRS_TO_SHOW_HIDDEN=(dir1 dir2 dir3)
for DIR in "$@"; do
for CHECK in "${DIRS_TO_SHOW_HIDDEN[@]}"; do
if [ "$(realpath "$DIR")" == "$CHECK" ]; then
ls -a "$DIR"
else
ls "$DIR"
fi
done
done
}
Não testei isso, então duvido que seja perfeito, mas pelo menos dá uma ideia. Talvez você precise trabalhar para passar argumentos extras para ls
.
Responder2
Para dar corpo ao meu comentário sobre a resposta de John Moon, aqui está uma função que agrupa ls
e adiciona um -a
sinalizador se o caminho corresponder a uma determinada lista:
function ls() {
# if no arguments are provided, the current directory is assumed
[ "$#" -eq 0 ] && set .
case "$(realpath "$1")" in
(/path/to/jason/filestoprocess*|\
/path/to/jason/otherfilestoprocess*)
set -- -a "$1" ;;
esac
command ls "$@"
}
A primeira seção da função verifica se um bare ls
está sendo executado; neste caso, definimos .
(o diretório atual) como parâmetro #1; caso contrário, assumimos que o primeiro parâmetro (fornecido) é o caminho para listar.
Se o caminho definido ou fornecido corresponder aos padrões listados (...filestoprocess ou ...otherfilestoprocess aqui), então usamos set
novamente para adicionar o -a
sinalizador aos parâmetros. No final, chamamos command
o comando real ls
com os argumentos que organizamos. Graças amurupor apontar a set
simplificação!
Para adicionar mais caminhos, simplesmente continue os padrões, separando-os com (|)
barras verticais. Quebrei os dois padrões existentes em linhas separadas com o caractere de escape de barra invertida \
para torná-los mais fáceis de ler.
Se você ls
já tiver um alias para algo, isso terá precedência e precisará ser removido para que esta função funcione (caso contrário, quaisquer sinalizadores que o alias adicionar serão passados para esta função e terminarão em $1
). Se houver sinalizadores que você gostaria de ter ls
por padrão, basta adicioná-los às duas command ls
chamadas correspondentes.