사실 매달 금요일에 2012년에 생성된 파일과 폴더를 검색해야 합니다.
이 명령을 사용하여 몇 가지 시도를 했지만 find
성공하지 못했습니다.
답변1
가장 간단한 방법 find
은 다음과 같습니다.
find / -daystart -mtime +41 -mtime -408 \
-printf "%M %n %u %g %10s %TY-%Tm-%Td %Ta %TH:%TM:%TS %h/%f\n" |
awk '($7=="Fri"){print}'
필요에 따라 조정하여 여기 -printf
에 더 가깝게 보이도록 만듭니다 ls -l
.
%T
( 및 )를 사용하면 타임스탬프 형식 (예: 요일) 을 %A
%C
사용할 수 있습니다 . (날짜 범위를 41 - 408로 조정해야 할 수도 있지만 실제로는 단지 최적화할 수 있거나 더 쉽게 파악하기 위해 조정할 수 있습니다.)strftime()
%Ta
grep 2012
-printf
편집하다:더 강력한 버전이지만 명확성이 약간 감소했습니다.
find / -daystart -mtime +41 -mtime -408 \
-printf "%M %n %u %g %10s %TY-%Tm-%Td %Ta %TH:%TM:%TS\0%h/%f\0\0" |
gawk 'BEGIN{RS="\0\0"; FS="[\0]"} ($1~/ Fri /) { printf $2 "\0"}' |
xargs -0 -n 1 -i ls -l "{}"
이는 시뮬레이션 -print0
하지만 각 줄에는 두 개의 \0
구분된 필드가 있으며 파일 이름은 두 번째입니다. ls -l "{}"
끝 부분을 파일과 관련하여 필요한 것으로 바꾸십시오 . 나는 명시적으로 를 사용하고 있는데 , 다른 awks는 /의 \0 바이트를 gawk
그렇게 친절하게 처리하지 않습니다 (파일 이름의 개행 문자를 처리하도록 업데이트되었습니다).RS
FS
게다가 제안에 따르면mretub%Tu
언어 독립 옵션을 사용 %Ta
하거나 번호가 매겨진 평일을 대체할 수 있습니다.
답변2
도구를 사용하십시오 gnu
:
find . -exec bash -c '[[ $(date -r "$0" +%u%Y) = "52012" ]]' {} \; -print
-print
파일/디렉터리 이름은 이전 이름이 반환되는 -exec
경우에만 편집됩니다.진짜즉, mtime
지정된 형식( )에 따른 보고서가date -r
%u%Y
52012
zsh
또는 -only 솔루션을 선호하는 경우 (매우 유사, -string은 e
따옴표 안의 표현식에서 반환된 파일/디렉터리만 선택합니다)진짜):
zmodload zsh/stat
print -rl -- **/*(De_'[[ $(zstat -F "%u%Y" +mtime -- $REPLY) = "52012" ]]'_)