Linux를 사용하여 찾기

Linux를 사용하여 찾기

디렉터리 폴더에서 MAIN.TXT 파일을 찾고 싶습니다. 24시간이 지난 경우 MAIN.txt 파일에 YES를 출력합니다. 24시간 이내에 수정하지 않으면 파일이 유지됩니다.

내가 지금까지 가지고 있는 것:

find /directory -type f -mtime +1 -exec echo 'YES' > /directory/MAIN.txt \;

MAIN.TXT 파일은 24시간보다 오래되었으므로 제대로 작동합니다. 그러면 MAIN.TXT 모드 시간이 현재 시간으로 업데이트되고 MAIN.txt 파일에 YES가 있습니다.

MAIN.TXT가 24시간보다 최신인 경우에도 MAIN.TXT는 빈 txt로 수정되고 수정 시간이 변경됩니다.

조건이 필요하다는 것은 알지만 그것이 어디로 가는지 이해할 수 없는 것 같습니다. 또한 강사가 ECHO 매개변수에 {}를 언급했는데 그렇게 하면 AVAILABLE이 추가된 파일 이름을 얻게 됩니다.

답변1

Mark의 답변은 OP의 요구 사항에 약간 미치지 못하는 것 같습니다.

이 라이너를 터미널 프롬프트에서 사용해 보세요. 더 간단하고 아마도 더 강력할 것입니다.

[ $(find /path/to/directory/. -maxdepth 1 -type f -name MAIN.TXT -daystart -mtime +1) ] \
  && printf "YES" > /full/path/to/directory/MAIN.TXT

설명하려면 먼저 단일 행의 더 큰 청크를 살펴본 다음 각 청크로 이동하십시오.

  • 형태로서의 라이너[ block1 ] && block2
  • 이 구문 (공백 포함!)은 내장 연산자 [ block1 ]와 동일한 부울 논리 연산자입니다 .test
  • block1의 실행이 무엇이든 반환하면 결과는 [ block1 ]TRUE 입니다. 아무 것도 반환하지 않으면(그림 참조) ""이전 테스트의 결과는 FALSE입니다.
  • &&의 논리 연산자는 A && BA의 종료 상태가 or이면 B가 실행된다는 사실을 반영합니다. 따라서 실행이 TRUE이면 block2도 실행됩니다.0TRUE[ block1 ]
  • block1을 형태로 $( ). 이것은 명령 대체입니다. 대괄호 안의 모든 내용이 실행되고 출력이 명령을 대체합니다. 이것이 바로 "명령 대체"라고 불리는 이유입니다.
  • block1에서 대체된 cmd에는 검색 파일이 포함됩니다.
    • 그 유형은regular file
    • 명명 된MAIN.TXT
    • 디렉토리에/path/to/directory/.
    • 위에서 지정한 디렉토리 수준보다 낮지 않음( -maxdepth 1)
    • -mtime +1수정 시간은 오늘 시간( )으로부터 최소 24시간( )입니다 -daystart. -daystart검색 하지 않은 경우 파일은 24시간 전에 수정되었지만 그 이후어제 0시.

답변2

[ $(find /directory -type f -mtime +1 | wc -l) -gt 0 ] && echo 'YES' > /directory/MAIN.txt

관련 정보