찾기 결과에서 숨겨진 디렉터리에 있는 파일을 제외하지만 숨겨진 파일(숨겨지지 않은 디렉터리에 있음)은 제외하지 않습니다.

찾기 결과에서 숨겨진 디렉터리에 있는 파일을 제외하지만 숨겨진 파일(숨겨지지 않은 디렉터리에 있음)은 제외하지 않습니다.

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

$ tree --noreport dir

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

요구 사항은 숨겨진 디렉터리의 파일이 결과에서 제외되지만 숨겨진 파일(숨겨지지 않은 디렉터리 아래)은 포함되지 않도록 find를 호출하는 것입니다.

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

./.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

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

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

답변2

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

find . -type f ! -path '*/.*/*' -print
  • 경로 패턴은 */.*/*다음을 찾습니다 /. ..) 이미 팔로우 중(마지막으로)통과a  / — 따라서 세그먼트 이름은 다음으로 시작합니다.. 마지막(파일 이름)일 수 없습니다. 즉, 디렉터리 이름이어야 합니다.
  • -path와일드카드 또는 와일드카드라고도 알려진 파일 이름 확장 패턴을 사용합니다. 그러니 굳이 \앞에  붙일 필요는 없지..
  • -notGNU가 아닌 시스템으로 포팅하려는 경우에는 사용하지 마십시오. "아니요"를 의미 하는 사용은  ! POSIX에 의해 지정되며 모든 버전 find (BSD, Solaris 등 및 고대 시스템 포함)에서 작동합니다.

관련 정보