몇 가지 일반적인 * nix 시스템 (예 : Debian, CentOS, Arch 및 Kali)을 고려하세요.

저는 항상 중고 find; GNU find를 사용한 기억은 없지만 한 가지 예 에서 GNU find 구문이 더 간단 할 것이라고 가정했습니다 ( 더 적은 작업을 허용 할 수 있습니다 .

두 가지 질문이 있습니다.

  1. 일반적인 시스템에서 find 기본 “찾기 또는 작동”유틸리티입니까 아니면 시스템에 둘 다 findGNU find?

  2. GNU find find보다 간단합니다. ?

댓글

  • 당신은 항상 리눅스에서 GNU 찾기를 사용했습니다. ' busybox 또는 android에서 find의 큰 사용자입니다 😉 Linux가 아닌 시스템에서 GNU find는 일반적으로 gfind.
  • find --version😉
  • ' 당신이 언급하는 시스템은 GNU 시스템이며 대부분의 경우 GNU / Linux이지만 Debian은 다음과 같은 다른 몇 가지 커널에서도 사용할 수 있습니다. 잘. 따라서 ' 이러한 시스템의 find 구현이 GNU 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 findfind 기타 비 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)를 사용해야합니다.

답변

무료 (가격이 아닌 무료) 버전

, GNU 프로젝트는 POSIX 준수에 대해 걱정하지 않습니다. 의미가있는 경우 준수하지만 개선 할 수도 있습니다.

또한 다른 가 잘못되었습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다