find를 사용하여 디렉터리를 삭제할 때 "해당 파일이나 디렉터리가 없습니다"라는 메시지가 나타납니다.

find를 사용하여 디렉터리를 삭제할 때 "해당 파일이나 디렉터리가 없습니다"라는 메시지가 나타납니다.

저는 아마존 리눅스를 사용하고 있습니다. 디렉토리의 파일을 삭제하도록 설계된 이와 같은 명령문이 있습니다.

/bin/find $JBOSS_HOME/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec rm -rf {} \;

하지만 이로 인해 다음과 같은 진술이 많이 발생합니다.

/bin/find: `/usr/java/jboss/standalone/tmp/vfs/deployment2b6836209f40596a': No such file or directory
/bin/find: `/usr/java/jboss/standalone/tmp/vfs/deployment1fae3ca49edb3384': No such file or directory
/bin/find: `/usr/java/jboss/standalone/tmp/vfs/deploymenta2b0c99bfdd7f444': No such file or directory
...

내 명령문에서 존재하지 않는 파일을 검색하지 않도록 하거나 적어도 이러한 오류를 모두 제거할 수 있는 방법이 있습니까?

답변1

명령은 최근에 일부 파일이 변경된 경우에도 하루 동안 변경되지 않은 디렉터리를 삭제합니다.

이것이 당신이 원하는 것이라고 가정하면,스티븐 차제라스그리고트리거의견에는 두 가지 해결책이 제안되었습니다. 당신이 직면하고 있는 문제는 find디렉토리를 삭제하도록 지시한 다음 디렉토리를 탐색하여 그 안에 일치하는 파일이 있는지 확인하려고 한다는 것입니다.

  • 전달하면 -depth디렉터리 find의 내용이 먼저 처리되고 디렉터리 자체가 마지막에 처리됩니다. 이는 나중에 삭제될 디렉터리의 내용을 분석하는 데 시간을 낭비합니다.

    find $JBOSS_HOME/standalone/tmp/vfs -depth -mindepth 1 -mmin +1441 -exec rm -rf {} \;
    
  • 삭제되는 디렉터리를 탐색하지 않음을 -prune나타내는 데 사용됩니다 .find

    find $JBOSS_HOME/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec rm -rf {} \; -prune
    

오래된 파일만 삭제하고 싶다면 find알려주세요. -delete전화 대신 사용하실 수 있습니다 rm.

find $JBOSS_HOME/standalone/tmp/vfs -mmin +1441 -type f -delete

그런 다음 빈 디렉터리를 삭제할 수 있습니다.

find -depth $JBOSS_HOME/standalone/tmp/vfs -type d -empty -delete

또는 두 가지를 결합하고 삭제해야 하는 파일을 삭제한 후 디렉터리를 삭제합니다.

find $JBOSS_HOME/standalone/tmp/vfs -depth -mindepth 1 -mmin +1441 -type f -delete -o -type d -empty -delete

관련 정보