find
그래서 나는 그것을 사용하여 월요일에 마지막으로 수정된 특정 디렉토리의 모든 .html 파일 목록을 반환하고 싶습니다 . 어떻게 해야 하나요?
답변1
only 또는 이와 유사한 것을 사용하여 이를 직접 find
수행하는 좋은 방법은 확실하지 않지만 다음 find
을 사용할 수 있습니다 grep
.
find -printf '%Tw:%h/%f\0' | grep -z '^1:'
이기 때문에 find
물론 다른 플래그를 결합할 수도 있습니다.
find -name '*.html' -type f -printf '%Tw:%h/%f\0' | grep -z '^1:'
.html
로 끝나는 파일 만 가져옵니다 .
설명하다
이것은 내 테스트 디렉토리입니다.
$ ls -la
total 68
drwxr-xr-x 2 anthony anthony 4096 Mar 24 17:53 .
drwxrwxrwt 98 root root 61440 Mar 24 17:55 ..
-rw-r--r-- 1 anthony anthony 0 Mar 24 17:53 monday
-rw-r--r-- 1 anthony anthony 0 Mar 23 11:12 sunday
find
인수는 -printf
형식 문자열을 사용합니다. 여기서 %T는 마지막 수정 시간을 나타냅니다. 다음은 w
0(일요일)부터 6(토요일)까지의 요일을 나타냅니다. a
(약어: Mon) 또는 (전체: Monday)를 사용하여 이름을 얻을 수 있지만 A
이는 로캘별로 다릅니다. :
리터럴을 제공합니다 :
. %h/%f
는 경로와 파일 이름입니다. \0
null은 항목을 구분합니다(이와 같습니다 -print0
).
이것은 다음과 같은 내용을 인쇄합니다 1:./.<NULL>0:./sunday<NULL>1:./monday<NULL>
. 가독성을 높이기 위해 NULL을 개행 문자로 바꾸면 다음과 같습니다 tr '\0' '\n'
.
1:./.
0:./sunday
1:./monday
그런 다음 grep -z '^1:'
1:(월요일)로 시작하는 항목을 찾으세요.
답변2
사용자 ls
정의 형식으로 날짜를 출력 할 수 있습니다.
ls --time-style=+%A *.html | grep " Monday "
"월요일"이 파일 이름에 없다고 가정합니다.
답변3
귀하의 질문이 의심스럽기는 하지만 대답은 다음과 같습니다.
find ./ -type f -name '*.html' -printf "%Ta %p\n" | grep '^Mon' | sed 's:^Mon ::'
.html
서버에 설정된 현재 시간대에 따라 인류 역사에서 월요일에 마지막으로 수정된 것으로 끝나는 모든 파일을 찾습니다.
답변4
find
다음과 같이 with 를 사용하면 stat
수정 타임스탬프가 월요일인 모든 파일을 찾을 수 있습니다.
find . -type f -exec stat -t %a {} \; | awk 'match($10, /"Mon"/) {print $16}'
이 find
명령은 모든 파일을 찾아 awk
필터에 전달하기 전에 개수를 계산합니다. awk
필드 번호 10(즉, 파일 수정 시간)과 "Mon"
월요일에 수정된 파일을 추출하는 문자열을 일치시킵니다. 이 print $16
명령문은 파일 이름을 인쇄합니다. 삭제 $16
하여 모든 필드를 인쇄하거나 임의의 숫자를 사용하여 선택한 필드를 인쇄할 수 있습니다.
1부의 출력 예(OS X):
$ cd /usr ; find . -type file -exec stat -t %a {} \;
16777218 20556154 -rwxr-xr-x 1 루트 차크라 0 19600 "월요일" "목요일" "목요일" "토요일" 4096 16 0x20 ./bin/du
16777218 20547205 -rwxr-xr-x 1 루트 차크라 0 14256 "수요일" "목요일" "목요일" "수요일" 4096 16 0x20 ./bin/dwarfdump
16777218 20586248 -rwxr-xr-x 2 루트 차크라 0 925 "금요일" "목요일" "목요일" "일요일" 4096 0 0x20 ./bin/easy_install