다음과 같은 디렉토리 구조를 고려하면:
$ 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
와일드카드 또는 와일드카드라고도 알려진 파일 이름 확장 패턴을 사용합니다. 그러니 굳이\
앞에 붙일 필요는 없지.
.-not
GNU가 아닌 시스템으로 포팅하려는 경우에는 사용하지 마십시오. "아니요"를 의미 하는 사용은!
POSIX에 의해 지정되며 모든 버전find
(BSD, Solaris 등 및 고대 시스템 포함)에서 작동합니다.