Existe uma maneira de ter ls mostrar arquivos ocultos para apenas alguns diretórios?

3

Eu tenho um diretório onde, independentemente do usuário ou das opções selecionadas, eu gostaria que ele mostrasse sempre os arquivos ocultos.

Eu sei que a opção -a mostrará arquivos ocultos. Eu só quero automatizar a decisão sobre o uso da opção.

Digamos que eu esteja em / home / user Eu não me importo em ver os arquivos ocultos, mas se eu estiver em / filestoprcess eu quero ver os arquivos ocultos.

Esse tipo de funcionalidade existe?

    
por Jason K 23.11.2017 / 18:59

2 respostas

3

A maneira mais fácil de pensar nisso é criar um alias de shell que mapeie 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 função ls_mod 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
}

Eu não testei isso, então duvido que seja perfeito, mas pelo menos lhe dá a ideia. Você pode precisar trabalhar para passar argumentos extras para ls .

    
por 23.11.2017 / 19:31
2

Para detalhar meu comentário sobre a resposta de John Moon, aqui está uma função que agrupa ls e adiciona um sinal -a 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 ls está sendo feito; Neste caso, definimos . (o diretório atual) como parâmetro # 1; caso contrário, assumimos que o primeiro parâmetro (fornecido) é o caminho a ser listado.

Se o caminho definido ou definido corresponder aos padrões listados (ou ... filestoprocess ou ... otherfilestoprocess aqui), usaremos set novamente para incluir o -a flag nos parâmetros. No final, usamos command para chamar o comando ls real com os argumentos que organizamos. Graças a muru por apontar a simplificação set

Para adicionar mais caminhos, simplesmente continue os padrões, separando-os com o canal (|) caracteres. Eu quebrei os dois padrões existentes em linhas separadas com o caractere de escape de contrabarra \ para facilitar a leitura.

Se você tiver ls aliased para algo que já tenha precedência, precisará ser removido para que essa função funcione (caso contrário, todos os sinalizadores adicionados pelo alias serão transmitidos para essa função e terminarão em $1 ). Se houver flags que você gostaria de ter em ls por padrão, basta adicioná-las às duas chamadas command ls correspondentes.

    
por 19.12.2017 / 03:08