디렉토리에서 최신 500개 파일을 찾기 위해 한 줄의 쉘 스크립트나 유닉스 명령을 찾고 있습니다. 주요 제한 사항은 POSIX와 호환되어야 하며 디렉터리에 많은 수의 파일이 포함될 수 있다는 것입니다.
답변1
최신 500개 파일이 무엇인지 확인하려면 디렉터리의 모든 파일을 계산해야 한다고 확신합니다.
ls -t
| head -n 500
답변2
디렉터리와 모든 하위 디렉터리에 있는 파일을 참조하는 경우(예:
find . -exec sh -c \
$'echo "$(stat -c "%Y" "$0")\t$0"' {} \; | \
sort -k1nr | cut -f 2 | head -n 500
그러면 문제가 해결될 것입니다.
그것을 파괴:
find . -exec
현재 디렉터리의 각 파일에 대해 명령 실행sh -c "command" {}
command
표시된 각 파일에 대해 실행find
하고$0
파일 이름으로 설정stat -c "+%Y" "$0"
지정된 파일의 수정 시간을 인쇄합니다."$0"
sort -k1nr
번호 역순으로 첫 번째 필드를 기준으로 정렬cut -f 2
수정 시간 필드를 제거하고 파일 이름만 남깁니다.head -n 500
처음 500줄까지 인쇄
$'...'
이는 and( 즉, TAB)가 필드 구분 기호로 사용되기 때문입니다 .\t
sort
cut
\t
POSIX를 준수하려면 다음을 대체할 수 있습니다.
$'...\t...'
그리고
"...<press Ctrl-V, Tab>..."
불행히도 stat
휴대용이 아닙니다. Linux에서 사용되지만 stat -c "%Y"
FreeBSD 및 Mac OS에서도 사용됩니다 stat -f "%m"
.
이식 가능한 접근 방식을 정말로 원한다면 Python, Perl 또는 Ruby를 사용하는 것이 더 쉽습니다.