ディレクトリの場合、コマンドは内容を一覧表示し、ファイルの場合は内容を出力しますか?

ディレクトリの場合、コマンドは内容を一覧表示し、ファイルの場合は内容を出力しますか?

ディレクトリを渡すときに内容を一覧表示しますが、ファイルの場合は内容を出力するコマンドはありますか?

たとえば、通常、ディレクトリ構造を検索すると、次の内容の入力が開始されます。

ll /etc/path/  # I see a file in tab-completion that interests me, called myfile.txt
ll /etc/path/myfile.txt  # I do the auto-completion to get it into the command line
less /etc/path/myfile.txt  # Now I have to go back and change 'll' to 'less'

またはファイルを探している場合は、まず始めましょう。

less /etc/path  # I see in tab-completion several files that might interest me, so I need to know more
ll /etc/path  # See more info about file sizes, etc, so I can choose the file I want. Have to change 'less' to 'll'
less /etc/path/myfile.txt  # Now that I know which file I want, I have to go back and change 'll' to 'less'

これは私が一日に何十回もやっていることです。最も可能性の高いシナリオを満たすことができるコマンドやスクリプトはありますか?例えば

some-program /etc/path/to/file/or/directory

ターゲットがテキストファイルまたはテキストファイルへのシンボリックリンクの場合、「less /etc/path/to/.....」が実行されます。しかし、ディレクトリ、バイナリファイル、ブロックデバイスなどの他のものであれば、「ll /etc/path/to/...」を実行します。

もちろん、ファイルシンボリックリンクの「less」などの望ましくない操作を実行しますが、「ll」を使用してシンボリックリンク自体を表示したい場合は、手動で「ll」を実行できます。

そのようなことがありますか(おそらくそこにあります。一般的な作業のようです)?それとも私はLinuxコマンドラインを非効率的な方法で使用していますが、それを探索するより良い方法があるかもしれません...どうすればそれをしましたか?それとも、コマンドラインで「less」と「ll」の間を続けて行ったり戻ったりする唯一の人ですか?

some-program() {
  if [[ $# > 1 ]]; then
    echo "Only one argument supported at this time"
  exit 1
  fi
  if [[ $# == 0 ]]; then
    ELEMENT="."
  else
    ELEMENT="$1"
  fi
  if [[ -d $ELEMENT ]]; then
    ls --color=auto -alF "$ELEMENT"
  else
    less "$ELEMENT"
  fi
}

答え1

lessこのようなことができる非常にきれいな組み込み関数があります。lesspipeマニュアルページを参照してください。

この機能を使用してディレクトリのディレクトリリストを自動的に表示するには:

  1. lesspipeマニュアルページに従って設定してください。eval "$(lesspipe)"

  2. ~/.lessfilter以下を使用して作成し、実行可能にします。

    #!/bin/sh
    if [ -d "$1" ]; then
        ls -alF "$1"
    else
        # We don't handle this format.
        exit 1
    fi
    exit 0
    

lesspipeこれにより、ファイル形式を処理するために実行中のフィルタスクリプトが設定されます。表示するものがディレクトリであることを確認し、ディレクトリであればls実行します。

あなたの初期リクエストには色が含まれています。残念ながら、lessデフォルトでは色が表示されず、フィルタスクリプトの出力がまだパイプに接続されているため、これは少し難しいですless-Rこれを行うには、デフォルトのオプション(バイナリを見ている場合は良い考えではないかもしれません)を使用する必要があります。 lessfilterスクリプトにless新しいオプションを追加するように指示する方法がないと思います。

関連情報