몇 가지 일반적인 * nix 시스템 (예 : Debian, CentOS, Arch 및 Kali)을 고려하세요.
저는 항상 중고 find
; GNU find를 사용한 기억은 없지만 한 가지 예 에서 GNU find 구문이 더 간단 할 것이라고 가정했습니다 ( 더 적은 작업을 허용 할 수 있습니다 .
두 가지 질문이 있습니다.
-
일반적인 시스템에서
find
기본 “찾기 또는 작동”유틸리티입니까 아니면 시스템에 둘 다find
및GNU find
? -
GNU find
는find
보다 간단합니다. ?
댓글
Answer
GNU 유틸리티는 종종 POSIX 표준을 구현 한 다음 추가 편의를 위해 추가 기능으로 확장합니다. (그리고 그 반대로 Unices 간의 이식성이 감소했습니다). 이식성 측면에서 GNU 유틸리티 또는 기타 특정 유틸리티 구현을 가정 할 때 지적하는 매우 신중한 답변이나 의견이이 사이트에서 볼 수있는 이유가 있습니다.
Linux를 사용하는 경우 시스템에서 매우 find
의 GNU 구현을 사용하고 있으며 다른 find
설치되었습니다. Linux가 아닌 시스템에서는 기본 find
가 있고 GNU find
도 설치할 수 있습니다 (대부분의 경우 name gfind
또는 드물게 gnufind
).
대부분의 GNU 유틸리티와 마찬가지로 GNU find
는 표준 find
사양 을 구현하고 확장 합니다. 따라서 “단순”한 것이 아니라보다 편리하게하기 위해 더 복잡 할 수 있으며 엄격한 표준 준수 find
보다 복잡한 특정 작업을 수행하는 것이 다소 쉽습니다. .
find
의 확장 구현 (예 : -maxdepth
및 표준에서 언급하지 않는 술어, 특히 GNU find
에는 -printf
를 사용하여 발견 된 경로 이름을 인쇄 할 수 있습니다. 다양한 형식화 가능성 (표준 find
에는 -printf
이 없음) 및 경로 이름에서 다양한 종류의 정규식 일치를 수행하기위한 술어, 기타 여러 비표준 술어뿐만 아니라 그 중 일부는 find
의 다른 구현에서도 발견됩니다 (아마도 whi ch는 사용중인 find
1 )에 따라 약간 다르게 작동합니다.
-delete
조건자는 비표준이지만 GNU find
및 find
기타 비 Linux 시스템에서. GNU find
“의 -delete
는 비어 있지 않은 디렉토리를 삭제하는 데 사용하면 불평하지만 OpenBSD와 같은 해당 옵션은 find
는 그렇지 않습니다 (비어 있지 않은 디렉토리도 삭제하지 않습니다).
배포 여부에 관계없이 대부분의 Linux 시스템은 동일한 coreutils 및 findutils 도구 세트 (예 : 분명히 busybox가 존재합니다). 완전히 다른 도구 구현 세트를 사용하려면 오픈 소스 BSD 시스템 중 하나로 이동하거나 macOS, Solaris, AIX 또는 기타 상용 Unix로 이동해야합니다.
1 GNU find
는 -execdir
를 사용할 때 경로 이름 앞에 ./
를 추가합니다. 일부 다른 구현은 그렇지 않습니다.
댓글
- 및
-print0
및-direxec
및-delete
및 … ;-). GNU 도구에서 사용할 수있는 null 구분 기호 옵션은 특히 편리합니다. - @StephenKitt 그러나 거의 필요 🙂
- 여기에 POSIX가 아닌 답변을 작성할 때를 제외하고는 ;-). (또는 어디서나 작동해야하는 스크립트)
- GNU 문서의 주된 문제는 사람들이 POSIX 메서드에 비표준 별칭을 사용하도록하여 공급 업체 잠금을 만드는 관련 스크립트.
- @StephenKitt
-print0
는 * bsd 및 solaris에서도 사용할 수 있습니다. 하지만 솔라리스에서는xargs -0
가 ' 작동하지 않으므로gxargs -0
(/usr/bin/sfw
)를 사용해야합니다.
답변
사람들이 자주 언급하는 것 Linux는 GNU / Linux : Linux + GNU로 더 잘 알려져 있습니다. 따라서 사용중인 도구는 아마도 GNU 일 것입니다.
- Linux : 커널, GNU / Linux, Android 및 기타 여러 시스템에서 사용됩니다.
- GNU : an Linux 커널과 함께 자주 사용되지만 BSD, Hurd, Cygwin (Microsoft Windows 용 DLL, 커널 인 것처럼 가장 함), WSL (Linux 용 Windows 하위 시스템 : Linux가없는 GNU, Microsoft의 Windows), HPUX, Solaris, Dec Athena 등이 있습니다.
그러므로 아마도 GNU find를 사용하고 계실 것입니다.
GNU는 find
무료 (가격이 아닌 무료) 버전
, GNU 프로젝트는 POSIX 준수에 대해 걱정하지 않습니다. 의미가있는 경우 준수하지만 개선 할 수도 있습니다.
또한 다른 가 잘못되었습니다.
find
의 큰 사용자입니다 😉 Linux가 아닌 시스템에서 GNU find는 일반적으로gfind
.find --version
😉find
구현이 GNUfind
인 것은 놀라운 일이 아닙니다.