서로 다른 디렉터리에 3개의 폴더가 있고 그 중 일부에는 더 많은 하위 폴더가 포함되어 있으며 각 폴더/하위 폴더에는 어떤 방식으로든 문자열을 포함하는 test1
, test2
등 이라는 이름의 텍스트 파일이 있다고 가정합니다. 그냥 일 수도 있고 , 등등 일 수도 있습니다 .test3
hello
hello
helloJASKFNASKFN
해당 파일의 정렬된 목록을 표시하려면 어떻게 해야 합니까? 이름이나 수정된 날짜별로 정렬하고 싶다고 가정해 보겠습니다. grep
or 명령을 사용하여 해당 파일을 검색하고 표시할 수 있다는 것을 이해 find
하지만 정렬된 방식으로 표시할 수 있는 방법은 잘 모르겠습니다.
답변1
파일 목록을 다음으로 전달하기 전에 먼저 정렬하면 더 쉽습니다 grep
.
에서는 zsh
다음을 수행할 수 있습니다.
grep -le hello -- **/test<->(.)
이름 뒤에 하나 이상의 십진수( 숫자 범위와 일치하는 패턴 의 형태 ) hello
가 오는 파일의 내용에서 현재 작업 디렉터리 안이나 아래에서 숨겨진 디렉터리를 건너뛰고 찾습니다 .test
<->
<x-y>
기본적으로 Glob 확장은 이름별로 정렬됩니다.
수정 시간별로 정렬하려면 (.om)
대신 를 사용하십시오 (.)
. 또는 (.oL)
크기별로. info zsh qualifiers
glob 한정자 목록과 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