멋지네요: 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 expression
find
여기서 해야 할 올바른 일은 Michael Homer가 주석에서 지적한 것처럼 쉘의 패턴을 인용하는 것입니다(그는 escape라고 말했지만 *
IMHO는 전체 패턴을 인용하는 것이 더 좋아 보이고 동일한 효과가 있습니다).
find . ! -name '*custom.conf' -delete
이런 방식으로 패턴은 있는 그대로 전달되고 find
유틸리티는 현재 디렉토리의 모든 이름에 대해 자체 일치를 수행합니다.
-type f
또한 일반 파일에서만 작업할 수 있도록 다음을 추가하고 싶습니다 .
find . -type f ! -name '*custom.conf' -delete