我可以让外壳根据文件类型决定 ls 或更少吗?

Phi*_*rke 3 less directory

我经常发现自己使用“ls”查看目录,然后当我找到我想要的文件时,我使用“less”查看文件。

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
Run Code Online (Sandbox Code Playgroud)

(这是一个人为的例子,但希望你知道我在做什么)

我觉得很烦人,我需要决定命令应该是 ls 还是更少。为什么 'less' 不能确定它是否已被赋予一个目录并充当 'ls' ?

是否有我可以使用的命令,而不是根据文件类型充当 ls 或 less 的命令?或者是否有人们使用的通用别名?

rep*_*lay 15

在 bash 中,您可以轻松创建一个函数来执行此操作:

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

显然,您可以通过替换less_ls部分来将函数重命名为您想要的任何名称,如果您命名它less,它将具有可执行文件的优先级less。如果您希望每次启动 Bash 时都自动定义它,您可以将其复制粘贴到您的~/.bashrc文件中。

  • 当然,他可以,但他说他不想。我不能告诉人们他们必须喜欢什么。 (7认同)
  • 或者 OP 可以使用正确的命令... +1 的解决方法。 (3认同)

Gil*_*il' 5

能够确定它是否已被赋予了目录。将LESSOPEN环境变量设置为~/bin/LESSPIPE并制作~/bin/LESSPIPE如下脚本:

#!/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
Run Code Online (Sandbox Code Playgroud)

您将获得目录和档案的列表。

您可以使用lesskey代替环境变量来设置预处理器。有关详细信息,请参阅文档。