디렉토리를 전달할 때 내용을 나열하지만 파일인 경우 내용을 출력하는 명령이 있습니까?
예를 들어, 일반적으로 디렉토리 구조를 검색할 때 다음과 같은 내용을 입력하기 시작합니다.
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
매뉴얼 페이지를 참조하십시오 .
이 기능을 사용하여 디렉토리의 디렉토리 목록을 자동으로 표시하려면:
lesspipe
매뉴얼 페이지를 따라 설정하십시오.eval "$(lesspipe)"
~/.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
새 옵션을 추가하도록 지시하는 방법이 없다고 생각합니다 .