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

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

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 -aopçã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_modfunçã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 lse adiciona um -asinalizador 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 lsestá 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 setnovamente para adicionar o -asinalizador aos parâmetros. No final, chamamos commando comando real lscom os argumentos que organizamos. Graças amurupor apontar a setsimplificaçã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ê lsjá 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 lspor padrão, basta adicioná-los às duas command lschamadas correspondentes.

informação relacionada