나는 이것이 어떻게 작동하는지 조금 혼란스러워합니다 dirs
. 문서에는 다음과 같이 나와 있습니다.
목차
인수가 없으면 디렉터리 스택의 내용을 인쇄합니다. 명령을 사용하여 이 스택에 디렉터리를 추가
pushd
하고cd
또는popd
명령을 사용하여 디렉터리를 제거합니다.
Q1.나는 popd
Nor 를 사용하지 않지만 내가 방문한 디렉토리를 추적 pushd
한다는 것을 알았습니다 .dirs
cd
다음에 추가, 스택의 디렉터리를 삭제하지 않음)
질문 2긴 세션을 사용하면 cd
일반적으로 dirs
긴 디렉터리 목록이 인쇄되지만 이 목록은 가장 최근 디렉터리를 먼저 인쇄하고 마지막 디렉터리로 끝납니다. 따라서 긴 목록이 있으면 화면이 스크롤되어 최신 디렉터리 목록을 쉽게 볼 수 없습니다. 디렉토리(보통 내가 가장 관심을 갖는 디렉토리).
디렉토리 목록을 역순으로 인쇄하는 방법은 무엇입니까?
시도했지만 dirs | sort -r
항목이 올바르게 정렬되지 않았습니다. 예를 들어 다음과 같습니다.
20 /foo20/bar
2 /foo2/bar
19 ...
18
...
16
11
10
1
0
정렬되지 않은 원본은 다음과 같습니다.
1 /foo/bar
2 /foo2/bar
3 ...
..
9
10
11
..
20
21
..
30
답변1
sort
기본적으로 정렬은 ASCII 값을 기반으로 하므로 숫자가 다른 숫자는 올바르게 정렬되지 않습니다. 이 -n
옵션을 사용하여 선행 숫자 값을 기준으로 정렬하도록 지시할 수 있습니다.
dirs -v | sort -nr
또는 의 출력이 dirs
이미 정렬되어 있지만 역순으로 변경하려는 경우 다음 tac
명령(reverse cat
)을 사용할 수 있습니다.
dirs -p | tac
답변2
이 작업을 수행 cd +
한 다음 Tab보기를 클릭하고 최근 방문한 디렉터리 목록을 탐색합니다. 최신 디렉터리가 맨 위에 표시됩니다.
답변3
A1
활성화하셨나요 AUTO_PUSHD
?
setopt autopushd
또는 를 사용하여 활성화 할 수 있습니다 set -N
.
이것이 cd
디렉토리 스택에 추가되는 이유입니다.
A2
달리고 있는 것 같은데요 dirs -v
, 그렇죠 dirs
? ( -v
한 줄에 하나씩 나열해야 할 것 같습니다 .)
왜 안되나요 dirs -v | head
? 또는 dirs -v | less
? (또는 dirs | tac
qqx가 제안한대로.)
답변4
sort -r
줄을 내림차순으로 정렬 하는 경우 첫 번째 문자부터 시작하여 각 줄의 끝으로 이동합니다. "알파벳순" 정렬을 원하는 경우 정렬 키를 두 번째 필드로 제한해야 합니다.
dirs | sort -rk2,2
이는 (r) 역순을 지정하여 (k)ey를 필드 2(2)에서 필드(2)로 정렬합니다. 기본적으로 필드는 공백으로 구분됩니다. 그렇지 않은 경우 지정된 구분 기호를 사용할 수 있습니다 -t
.
반면에 숫자로 정렬하려면 다음을 수행하십시오.
dirs | sort -rkn1,1