폴더에 삭제되지 않은 수동으로 생성된 파일이 포함될 수 있다는 것을 알고 있는 경우 폴더에서 자동으로 생성된 파일을 삭제하는 가장 좋은 방법은 무엇입니까? [폐쇄]

폴더에 삭제되지 않은 수동으로 생성된 파일이 포함될 수 있다는 것을 알고 있는 경우 폴더에서 자동으로 생성된 파일을 삭제하는 가장 좋은 방법은 무엇입니까? [폐쇄]

멋지네요: find . ! -name *custom.conf -delete

하지만 custom.conf가 없으면 작동하지 않습니다.

나는 생각 중입니다:

  • 2개의 폴더로 분할
  • find 명령에 정규식 사용

면책 조항: 이것은 내 첫 번째 질문이므로 의견을 추가하는 것이 더 나을 것이라고 생각했습니다.https://unix.stackexchange.com/a/247973/247207하지만 댓글을 게시하는 데 필요한 평판이 없습니다.

답변1

여기서 문제는 유틸리티를 호출하기 전에 현재 디렉토리의 이름과 일치하는 경우 명령줄의 파일 이름 와일드카드 패턴이 셸에 의해 확장된다는 것입니다.

이는 실행되는 실제 명령이 다음과 같을 수 있음을 의미합니다.

find . ! -name thing1-custom.conf thing2-custom.conf thing3-custom.conf -delete

set -x명령을 호출하기 전에 명령줄에서 추적을 활성화하면 이를 확인할 수 있습니다. set +x나중에 추적을 끄는 데 사용됩니다 .

또한 명령을 실행하면 유틸리티 구현 에 따라 unknown option오류 메시지가 표시됩니다 .paths must precede expressionfind

여기서 해야 할 올바른 일은 Michael Homer가 주석에서 지적한 것처럼 쉘의 패턴을 인용하는 것입니다(그는 escape라고 말했지만 *IMHO는 전체 패턴을 인용하는 것이 더 좋아 보이고 동일한 효과가 있습니다).

find . ! -name '*custom.conf' -delete

이런 방식으로 패턴은 있는 그대로 전달되고 find유틸리티는 현재 디렉토리의 모든 이름에 대해 자체 일치를 수행합니다.

-type f또한 일반 파일에서만 작업할 수 있도록 다음을 추가하고 싶습니다 .

find . -type f ! -name '*custom.conf' -delete

관련 정보