Linux 터미널에서 특정 문자열을 포함하는 정렬된 파일 목록을 표시하는 방법

Linux 터미널에서 특정 문자열을 포함하는 정렬된 파일 목록을 표시하는 방법

서로 다른 디렉터리에 3개의 폴더가 있고 그 중 일부에는 더 많은 하위 폴더가 포함되어 있으며 각 폴더/하위 폴더에는 문자열을 포함 하는 이름 등 test1의 텍스트 파일이 있다고 가정해 보겠습니다 . 정의일 수도 있고 , 그럴 수도 있다 .test2test3hellohellohelloJASKFNASKFN

이러한 파일의 정렬된 목록을 표시하려면 어떻게 해야 합니까? 이름이나 수정된 ​​날짜별로 정렬하고 싶다고 가정해 보겠습니다. grepor 명령을 사용하여 이러한 파일을 검색하고 표시할 수 있다는 것은 알고 있지만 find정렬된 방식으로 표시하는 방법은 잘 모르겠습니다.

답변1

파일 목록을 다음으로 전달하기 전에 정렬하는 경우 grep:

에서는 zsh다음을 수행할 수 있습니다.

grep -le hello -- **/test<->(.)

hello숨겨진 디렉터리를 건너뛰고 이름 뒤에 하나 이상의 십진수(숫자 범위와 일치하는 패턴 형식)가 오는 현재 작업 디렉터리 안이나 아래의 파일 내용을 찾습니다 .test<-><x-y>

기본적으로 전역 확장은 이름별로 정렬됩니다.

수정 시간을 기준으로 정렬하려면 (.om)대신 를 사용하세요 (.). 또는 (.oL)크기별로. 글로벌 한정자 목록과 info zsh qualifiers한정자를 정렬할 수 있는 기준 목록은 참고자료를 참조하세요.o

역순 o으로 바꿉니다 ( 이름순으로 역순 정렬).OOn

(.n)숫자 이름을 기준으로 정렬하는 데 사용됩니다 ( 및 사이가 아닌 test10뒤 ).test9test1test2

당신이 만나면너무 많이 논쟁하다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

관련 정보