찾기 결과에서 숨겨진 디렉터리의 파일을 제외하지만 숨겨진 파일(숨겨진 디렉터리가 아닌 아래)은 제외하지 않습니다.

찾기 결과에서 숨겨진 디렉터리의 파일을 제외하지만 숨겨진 파일(숨겨진 디렉터리가 아닌 아래)은 제외하지 않습니다.

다음과 같은 디렉터리 구조를 고려하면:

$ tree --noreport dir

dir
├── fileA
├── .hiddenfileA
├── .hiddendirA
|   ├── .hiddenfileB
│   ├── fileC
│   └── fileD
└── dirA
    ├── .hiddenfileC
    ├── fileE
    └── fileF

요구 사항은 숨겨진 디렉터리의 파일이 아닌 숨겨진 파일(숨겨진 디렉터리가 아닌 아래)의 파일이 결과에서 제외되도록 찾기를 호출하는 것입니다.

예상 수익은 다음과 유사해야 합니다.

./.hiddenfileA
./dirA/.hiddenfileC
./dirA/fileE
./dirA/fileF
./fileA

좀 조사해서 알아냈어여기다음 호출을 생성하게 된 정보find

$ find . -type f -not -path '*/\.*' -print

하지만 이 솔루션에는 숨겨진 디렉터리를 건너뛰는 단점이 있습니다.및 파일.

답변1

숨겨진 디렉터리를 정리하고 결과를 파일로 제한합니다.

find . -type d -name '.?*' -prune -o -type f -print

제안한대로jthill, 디렉토리를 필터링하여 파일, 링크 등을 표시하는 것을 선호할 수 있습니다.

find . -type d -name '.?*' -prune -o ! -type d -print

답변2

당신이 가진 명령은 작동에 매우 가깝습니다. 사용

find . -type f ! -path '*/.*/*' -print
  • 경로 패턴은 */.*/*다음을 찾습니다 /. (다음으로 시작하는 세그먼트 이름을 의미함)..) 팔로우함(결국)~에 의해a  / — 따라서 다음으로 시작하는 세그먼트 이름은. 마지막 파일 이름(파일 이름)일 수 없습니다. 즉, 디렉토리 이름이어야 합니다.
  • -path파일 이름 확장 패턴을 사용합니다. 일명 글로브 또는 와일드카드. 그러니 \미리  넣을 필요는 없어요..
  • -notGNU가 아닌 시스템으로의 이식성을 원한다면 사용하지 마십시오 . "아님"을 나타내는 의 사용은  ! POSIX에 의해 지정되며 모든 버전 find (BSD, Solaris 등 및 고대 시스템 포함)에서 작동합니다.

관련 정보