posso obter o shell para decidir ls ou menos dependendo do tipo de arquivo?

3

Muitas vezes eu me vejo procurando por diretórios usando 'ls', então quando eu encontro o arquivo que eu quero, eu uso 'less' para ver o arquivo.

So for example to find a mysql log file I might type
ls /var

then:
ls /var/log/

and then:
ls /var/log/mysql

and finally:
less /var/log/mysql/mysql.log

(é um pouco um exemplo artificial, mas espero que você saiba o que estou fazendo)

Acho chato precisar de decidir se o comando deve ser ls ou menos. Por que não pode 'menos' determinar se recebeu um diretório e agir como 'ls'?

Existe um comando que eu possa usar em vez de menos que funcionará como ls ou menos dependendo do tipo de arquivo? Ou existe um apelido comum que as pessoas usam?

    
por Philip Clarke 02.01.2014 / 16:13

2 respostas

5

Menos pode determinar se recebeu um diretório. Defina a variável de ambiente LESSOPEN como ~/bin/LESSPIPE e efetue ~/bin/LESSPIPE um script como o seguinte:

#!/bin/sh
if [ -d "$1" ]; then
  exec /bin/ls -la "$1"
elif [ -f "$1" ]; then
  case "$1" in
    *.tar|ztar) exec tar tvvf "$1" 2>/dev/null;;
    *.tar.[dg]z|*.tar.z|*.tgz) exec gzip -dc "$1" | tar tvvf - 2>/dev/null;;
    *.tar.bz2) exec bzip2 -d <"$1" 2>/dev/null | exec tar tvvf - 2>/dev/null;;
    *.tar.Z|*.taz) exec uncompress -c "$1" | exec tar tvvf - 2>/dev/null;;
    *.zip) exec unzip -l "$1" 2>/dev/null;;
    *.lha) exec lha -v "$1" 2>/dev/null;;
    *.7z) exec 7z l "$1" 2>/dev/null;;
    *.[rs]pm) exec rpm -qilp "$1";;
    *.z|*.[dg]z) exec gzip -dc "$1" 2>/dev/null;;
    *.bz2) exec bzip2 -dc "$1";;
    *.xz) exec xz -dc "$1";;
    *.Z) exec uncompress -c "$1" 2>/dev/null;;
  esac
fi

Você receberá uma listagem de diretórios e arquivos.

Você pode usar lesskey em vez da variável de ambiente para definir o pré-processador. Veja a documentação para detalhes.

    
por 03.01.2014 / 02:17
15

No bash, você poderia facilmente criar uma função para fazer isso:

function less_ls()
{
  # True if file exists and is a regular file.
  if [ -f "${1}" ]
  then
    less "${1}"
  else
    ls "${1}"
  fi
}

Obviamente, você pode renomear a função para o que quiser, substituindo a parte less_ls , se você nomear less , ela terá precedência do executável less . Se você quiser que isso seja definido automaticamente toda vez que você iniciar o Bash, copie e cole no arquivo ~/.bashrc .

    
por 02.01.2014 / 16:28