요일을 기준으로 파일을 검색하는 방법

요일을 기준으로 파일을 검색하는 방법

사실 매달 금요일에 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()%Tagrep 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그렇게 친절하게 처리하지 않습니다 (파일 이름의 개행 문자를 처리하도록 업데이트되었습니다).RSFS

게다가 제안에 따르면mretub%Tu언어 독립 옵션을 사용 %Ta하거나 번호가 매겨진 평일을 대체할 수 있습니다.

답변2

도구를 사용하십시오 gnu:

find . -exec bash -c '[[ $(date -r "$0" +%u%Y) = "52012" ]]' {} \; -print

-print파일/디렉터리 이름은 이전 이름이 반환되는 -exec경우에만 편집됩니다.진짜즉, mtime지정된 형식( )에 따른 보고서가date -r%u%Y52012

zsh또는 -only 솔루션을 선호하는 경우 (매우 유사, -string은 e따옴표 안의 표현식에서 반환된 파일/디렉터리만 선택합니다)진짜):

zmodload zsh/stat
print -rl -- **/*(De_'[[ $(zstat -F "%u%Y" +mtime -- $REPLY) = "52012" ]]'_)

관련 정보