특정 권한으로 수정된 최신 디렉토리 상위 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개 권한( )이 있는 디렉터리( )를 일치시킵니다 .f777
om
숨겨진 파일과 디렉터리는 무시됩니다. 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)
외부에서 내부로 읽으면 다음 작업이 수행됩니다.
- 전 세계에 공개된 디렉토리를 찾아보세요.
- 각 디렉터리에 대해 수정 타임스탬프와 파일 경로, 그 뒤에 NUL 문자를 인쇄합니다.
- 첫 번째 열이므로 숫자순으로, 즉 타임스탬프를 기준으로 목록을 정렬합니다.
- 0으로 끝나는 처음 5개의 항목을 가져옵니다.
- 이 목록을 하나씩 읽어보시기 바랍니다.
- 각 항목에서 타임스탬프를 제거합니다.
- 각 파일 이름의 참조 버전을 인쇄합니다.
답변4
find
전통적으로/전통적으로 다음과 짝을 이룹니다 xargs
:
find …something… -print0 | xargs -0 …dosomething…
Qn 파이프라인에 따라 수행해야 하는 작업xargs -0 ls -dlt
☝️참고: BSD 1 버전은 파이프 입력 없이는 실행되지 않지만 GNU의 경우 사용하는 것이 xargs
더 좋습니다 -r
.man xargs
__
1 — 주석에서 지적했듯이 OpenBSD는 예외입니다(OpenBSD의 경우가 종종 그렇듯이) ;)