find 명령을 ls -lt와 결합해 보십시오.

find 명령을 ls -lt와 결합해 보십시오.

특정 권한으로 수정된 최신 디렉토리 상위 5개를 찾으려고 합니다.

내 검색 명령은 다음과 같습니다

find -d -perm -a+rwx

그걸로 조합하려고 하는데

ls -lt

찾기 결과를 가져와 가장 최근에 수정된 파일이 맨 위에 오도록 긴 목록에 넣습니다.

내가 시도한 모든 것이 작동하지 않습니다. 결국 total=0이 됩니다.

답변1

zsh-ixly:

ls -ltd -- **/*(/omf777[1,5])

이 작업은 재귀적으로 반환된 처음 5개 파일( )에 대해 수행됩니다 ls( l긴 목록, 다시 수정 시간별로 정렬 t, -d내용이 아닌 디렉터리만 나열하는 플래그 포함).[1,5]zsh 전역 모드수정 시간( )을 기준으로 정렬하여 /777개 권한( )이 있는 디렉터리( )를 일치시킵니다 .f777om

숨겨진 파일과 디렉터리는 무시됩니다. D이를 고려하려면 glob 한정자를 추가하세요 .

답변2

.ie stat대신 사용 :ls

find . -type d -perm -a+rwx -exec stat -c "%Y %n" '{}' ';' | sort -rn | tail -n 5

답변3

Bash(또는 Zsh) 및 GNU 도구가 설치되어 있으면 모든 파일 이름을 처리할 수 있습니다.

while IFS= read -r -d '' -u 9
do
    printf '%q\n' "${REPLY#* }"
done 9< <(
  find . -type d -perm -a+rwx -printf '%T@ %p\0' |
    sort --general-numeric-sort --zero-terminated |
    head --lines=5 --zero-terminated)

외부에서 내부로 읽으면 다음 작업이 수행됩니다.

  1. 전 세계에 공개된 디렉토리를 찾아보세요.
  2. 각 디렉터리에 대해 수정 타임스탬프와 파일 경로, 그 뒤에 NUL 문자를 인쇄합니다.
  3. 첫 번째 열이므로 숫자순으로, 즉 타임스탬프를 기준으로 목록을 정렬합니다.
  4. 0으로 끝나는 처음 5개의 항목을 가져옵니다.
  5. 이 목록을 하나씩 읽어보시기 바랍니다.
  6. 각 항목에서 타임스탬프를 제거합니다.
  7. 각 파일 이름의 참조 버전을 인쇄합니다.

답변4

find전통적으로/전통적으로 다음과 짝을 이룹니다 xargs:

find …something… -print0 | xargs -0 …dosomething…

Qn 파이프라인에 따라 수행해야 하는 작업xargs -0 ls -dlt

☝️참고: BSD 1 버전은 파이프 입력 없이는 실행되지 않지만 GNU의 경우 사용하는 것이 xargs더 좋습니다 -r.man xargs

__

1 — 주석에서 지적했듯이 OpenBSD는 예외입니다(OpenBSD의 경우가 종종 그렇듯이) ;)

관련 정보