bash에서 find를 사용하여 확장 패턴을 기반으로 채우기 작업

bash에서 find를 사용하여 확장 패턴을 기반으로 채우기 작업

"find" 명령을 사용하여 명령을 실행 중인 디렉터리에 있는 모든 하위 폴더에서 주어진 확장의 쓸모 없는 일부 채우기를 삭제합니다.

find -type f -name *.txt -delete
find -type f -name *.xml -delete
find -type f -name *.pdbqt -delete
find -type f -name *.txt -delete

이 4가지 명령을 하나로 결합하여 1개의 명령으로 4가지 유형의 채우기를 제거할 수 있습니까? *.dlg 확장자에 속하지 않는 모든 채우기를 제거하기 위해 find를 사용할 수도 있습니까?

답변1

인용되지 않은 *.txt것은 나쁘다. 보다find유틸리티는 와일드카드를 사용할 때 모든 파일을 출력하지 않습니다..

이 4가지 명령을 하나로 결합할 수 있나요?

예. 보다여러 find명령을 하나로 결합.

find . \( -name '*.txt' -o -name '*.xml' -o -name '*.pdbqt' \) …

(네 번째 명령이 첫 번째 명령을 복제하고 동일한 패턴을 두 번 사용하는 것은 의미가 없기 때문에 3개의 패턴을 사용합니다.)

find확장명 에 속하지 않는 모든 파일을 제거하기 위해 대안으로 사용할 수 있습니까 *.dlg?

예(그리고 전체 파일이 아닌 일반 파일을 원한다고 가정합니다.파일):

find . -type f ! -name '*.dlg'        # -delete

위 명령이 실제로 삭제하려는 파일을 인쇄하는 경우 #제거된 상태로 실행하십시오.

테스트 ! -name '*.dlg'가 무효화되었습니다 -name '*.dlg'. -name '*.dlg'실패할 경우에만 성공합니다 .

-delete당신은 질문에 사용했으므로 find분명히 그것을 지지합니다. 덜 강력한 사용자는 find다음을 참조하십시오.find: -exec rm {} \;vs. -delete- 전자가 널리 권장되는 이유는 무엇입니까?

귀하의 경우에는 다음 find과 같이 작동합니다 find .. 일부 구현에서는 명령줄에 하나 이상의 경로가 필요하기 find .때문에 명시적으로 사용했습니다 .find

관련 정보