디렉터리 폴더에서 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 && B
A의 종료 상태가 or이면 B가 실행된다는 사실을 반영합니다. 따라서 실행이 TRUE이면 block2도 실행됩니다.0
TRUE
[ 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