12* 및 13* 시리즈 파일을 한 번에 나열

12* 및 13* 시리즈 파일을 한 번에 나열

안녕하세요. 시리즈 ABC1*, ABC12* 및 ABC13* ABC14* 시리즈 등으로 시작하는 파일 목록이 있습니다.

find 명령을 사용하여 ABC12* 및 ABC13* 목록을 가져오고 싶습니다.

다음 명령어를 사용하고 있는데 정확한 결과를 추출할 수 없습니다..

ls -ltr |grep -e "ABC12" |find . -type f -mtime 15

답변1

-name옵션 검색 모드. 대괄호는 OR의 내용을 의미합니다.

find . -type f -name  'ABC1[23]*'

답변2

-mtime 15뜻 은 참고하세요"다음 24시간 단위로 반올림한 나이는 15세입니다.", 즉 14*24몇 시간 전에 15*24수정된 파일 입니다.하늘많은 시간대와 마찬가지로 연간 하루 23시간과 하루 25시간이 있습니다. 이것이 당신이 원하는 것이라고 가정하고 를 사용하여 zsh다음을 수행할 수 있습니다.

ls -lrtd -- **/ABC1[23](D.m15)

또는:

find . -type f -name 'ABC1[23]' -mtime 15 -exec ls -lrtd {} +

그러나 파일 수가 명령에 전달된 매개 변수와 환경의 최대 크기를 초과하면 첫 번째 파일이 실패하고, 두 번째 파일을 사용하면 ls여러 인스턴스가 실행되므로 목록이 시간순으로 정렬되지 않습니다. 요청대로 -t.

zshGNU를 사용하면 ls다음과 같이 이 문제를 해결할 수 있습니다.

autoload zargs
zargs -- **/ABC1[23](D.m15Om) -- ls -lUd

즉, zsh필요에 따라 목록을 정렬하여 하나 이상의 호출에 전달하되 목록을 정렬하지 말라고 알려줍니다. 다른 구현의 경우 쓸모는 없지만 무해한 다른 정렬로 대체하여 수행하도록 할 수 있습니다.lslslsUrt

ABC17, , with ABC23대신 ->와 같은 범위를 원한다면 다음과 같이 하면 됩니다.ABC12ABC13zsh

ls -lrtd -- **/ABC<17-23>(D.m15)

(그러나 ABC<17-23>일치 는 ABC17일치하지 않습니다 ABC0000017. 이것이 문제인 경우 (glob 연산자에는 옵션이 필요 하지만) <17-23>로 변경하여 2자리 숫자만 일치하는지 확인하거나 앞에 0이 있는 숫자를 제외하십시오.(<17-23>~^??)extendedglobpattern~exclude(<17-23>~0*)

파일 이름인 경우시작상대적인ABC12 ABC12, 그렇다면 당신은 할 것입니다

ls -lrtd -- **/ABC<17-23>*(D.m15)

하지만 이는 ABC170에서도 일치한다는 점에 유의하세요. 이를 방지하려면:

setopt extendedglob
ls -lrtd -- **/ABC<17-23>^[0-9]*(D.m15)

즉, <17-23>십진수로 시작하지 않는 모든 항목이 뒤에옵니다.

이에 상응하는 내용 find(앞에 0을 허용하지 않고 많은 수의 파일에 대해 위의 문제가 있고 파일 이름에 유효하지 않은 문자가 포함되어 있고 ./모든 파일에 접두사가 있는 경우 잠재적인 문제가 있음에도 불구하고) 때때로 다음과 같습니다.

find . \( -name 'ABC1[7-9]*' -o -name 'ABC2[0-3]*' \) \
       ! -name 'ABC??[0-9]*' -mtime 15 -type f \
      -exec ls -lrtd {} +

관련 정보