파일이 존재하는지 자동 통계 확인

파일이 존재하는지 자동 통계 확인

파일이 bash 줄에 있으면 명령을 실행합니다.

내가 지금 하고 있는 일은 다음과 같습니다.

$ stat /last_dump.sql && mysql -D my_database < last_dump.sql

이것이 옳은 일입니까?

잘 작동하지만 통계 보고서가 출력됩니다.

  File: '/last_db.sql'
  Size: 42161       Blocks: 88         IO Block: 4096   regular file
Device: 26h/38d Inode: 108         Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    me)   Gid: (    0/    me)
Access: 2016-06-08 08:07:15.886741191 +0000
Modify: 2016-06-08 08:07:06.218593606 +0000
Change: 2016-06-08 08:07:06.218593606 +0000
 Birth: -

내가 어떻게 할 수있는아니요이 통계 보고서를 표시하시겠습니까?

답변1

파일 테스트 연산자를 사용할 수도 있습니다.

[[ -e ./last_dump.sql ]] && mysql -D my_database < ./last_dump.sql

이러한 연산자에 대한 자세한 내용은 여기에서 확인할 수 있습니다.파일 테스트 연산자

그러나 사용을 선호하는 경우 stat출력을 다음으로 전송할 수 있습니다 /dev/null.

stat ./last_dump.sql >/dev/null && mysql -D my_database < ./last_dump.sql

위의 명령 은 ./현재 디렉터리를 의미합니다. 또한 오류가 발생하더라도 stat가 완전히 조용해지도록 하려면 또는 (동일한 결과로)을 /dev/null사용하여 오류를 이동할 수도 있습니다 .&>/dev/null>/dev/null 2>&1

답변2

이 호출은 stat파일 수정 시간이나 권한과 같은 기본 셸 명령에서 얻을 수 없는 정보를 얻는 데에만 유용합니다. 파일이 존재하는지 테스트하려면 이 test명령을 사용하십시오 [. 이 명령은 대부분의 쉘에 내장되어 있습니다.

if [ -e last_dump.sql ]; then mysql -D my_database < last_dump.sql; fi

test는 -e지정된 파일이 존재하는지 여부를 테스트합니다. 파일은 깨진 기호 링크를 포함하여 모든 유형일 수 있습니다. 일반 파일(일반 파일에 대한 심볼릭 링크 포함)만 필요한 경우 -f.

다음을 사용하는 데에는 여러 가지 이유가 있습니다 [ … ].stat

  • stat출력 삭제만 호출하는 것은 파일이 존재하는지 테스트하는 난독화된 방법입니다. 코드를 읽을 사람(예: 6개월 후)을 생각해 보세요. [ -e file ]코드는 단순히 " file그것이 존재합니까?"라고 말하는 반면 호출은 stat"파일에 대한 메타데이터를 주세요"라고 말하고 코드가 존재하는지 테스트하는 것은 단지 부작용.
  • [ … ]표준 명령이지만 stat모든 Unix 변형에는 존재하지 않으며 호환되지 않는 명령줄 옵션이 있습니다. 이 특정한 경우에는 명령줄 옵션을 사용하지 않으므로 그렇게 나쁘지 않습니다.
  • stat외부 명령이므로 속도가 느립니다.

&&"if"를 의미할 때도 이 단어를 사용하지 마세요. 이는 또한 가독성이 훨씬 낮습니다. 또한 set -e(프로그램이 중단되면 쉘에 종료하라고 지시) 존재하지 않으면 [ -e last_dump.sql ] && mysql …스크립트를 중단하고 계속 실행되기 때문에 매우 강력하지도 않습니다 .last_dump.sqlif [ -e last_dump.sql ]; then …; fi

관련 정보