서로 다른 디렉터리에 3개의 폴더가 있고 그 중 일부에는 더 많은 하위 폴더가 포함되어 있으며 각 폴더/하위 폴더에는 문자열을 포함 하는 이름 등 test1
의 텍스트 파일이 있다고 가정해 보겠습니다 . 정의일 수도 있고 , 그럴 수도 있다 .test2
test3
hello
hello
helloJASKFNASKFN
이러한 파일의 정렬된 목록을 표시하려면 어떻게 해야 합니까? 이름이나 수정된 날짜별로 정렬하고 싶다고 가정해 보겠습니다. grep
or 명령을 사용하여 이러한 파일을 검색하고 표시할 수 있다는 것은 알고 있지만 find
정렬된 방식으로 표시하는 방법은 잘 모르겠습니다.
답변1
파일 목록을 다음으로 전달하기 전에 정렬하는 경우 grep
:
에서는 zsh
다음을 수행할 수 있습니다.
grep -le hello -- **/test<->(.)
hello
숨겨진 디렉터리를 건너뛰고 이름 뒤에 하나 이상의 십진수(숫자 범위와 일치하는 패턴 형식)가 오는 현재 작업 디렉터리 안이나 아래의 파일 내용을 찾습니다 .test
<->
<x-y>
기본적으로 전역 확장은 이름별로 정렬됩니다.
수정 시간을 기준으로 정렬하려면 (.om)
대신 를 사용하세요 (.)
. 또는 (.oL)
크기별로. 글로벌 한정자 목록과 info zsh qualifiers
한정자를 정렬할 수 있는 기준 목록은 참고자료를 참조하세요.o
역순 o
으로 바꿉니다 ( 이름순으로 역순 정렬).O
On
(.n)
숫자 이름을 기준으로 정렬하는 데 사용됩니다 ( 및 사이가 아닌 test10
뒤 ).test9
test1
test2
당신이 만나면너무 많이 논쟁하다execve()
오류(대부분의 시스템에서 시스템 호출 제한으로 인해 발생):
autoload -Uz zargs # best in ~/.zshrc
zargs -- **/test<->(.) -- grep -le hello --
GNU 도구 및 모든 셸 사용(명령을 한 줄에 입력해야 하는 (t)csh 제외):
이름으로 분류하다:
LC_ALL=C find . -regextype posix-extended -name '.?*' -prune -o \
-regex '.*/test[0-9]+' -type f -print0 |
sort -z |
xargs -r0 grep -le hello --
( 숫자 정렬 -V
옵션 추가 sort
)
수정 시간별로 정렬:
LC_ALL=C find . -regextype posix-extended -name '.?*' -prune -o \
-regex '.*/test[0-9]+' -type f -printf '%T@\t%p\0' |
sort -zrn |
cut -zf2- |
xargs -r0 grep -le hello --
역순 -r
으로 추가/제거하세요 .sort