find 명령을 사용하여 파일을 검색하고 검색을 처리하는 방법에 몇 가지 문제가 있습니다.
현재 백업-20151219.zip, 백업-20151220.zip, 백업-20151221.zip 파일이 포함된 /tmp 디렉터리에 있다고 가정해 보겠습니다.
그러면 내 검색 명령은 다음과 같습니다.
[root@server tmp]# find /tmp -type f -mtime +2 -name backup* -exec rm -f {} \;
다음 메시지가 나타납니다.
find: paths must precede expression: backup-20151219.zip
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
이는 backup* 정규식과 일치하고 이를 결과 필터링에 사용하는 대신 검색 패턴으로 사용하기 때문입니다. 알아요.
backup*으로 시작하는 파일이 포함되지 않은 다른 디렉토리로 변경하면 예상한 결과가 표시됩니다.
그래서 와일드카드를 사용하여 일치 항목이 포함될 수 있는 디렉터리에서 파일을 검색하고 이를 결과로 표시하는 방법이 있는지 궁금했습니다.
답변1
간단히 말해서, 네, 방법이 있습니다. 어떻게든 와일드카드를 탈출해야 합니다. 이를 수행하는 방법에는 여러 가지가 있습니다. 제가 가장 많이 사용하는 방법은 특정 와일드카드 문자를 이스케이프하는 것입니다.
find . -name backup\* -print
또는 간단히 패턴을 참조하세요.
find . -name "backup*" -print
다른 접근 방식도 똑같이 잘 작동합니다. 요점은 쉘이 와일드카드를 전역 표현식으로 처리하지 못하도록 막는 것입니다.