다음과 같은 디렉터리 구조를 고려하면:
$ 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
파일 이름 확장 패턴을 사용합니다. 일명 글로브 또는 와일드카드. 그러니\
미리 넣을 필요는 없어요.
.-not
GNU가 아닌 시스템으로의 이식성을 원한다면 사용하지 마십시오 . "아님"을 나타내는 의 사용은!
POSIX에 의해 지정되며 모든 버전find
(BSD, Solaris 등 및 고대 시스템 포함)에서 작동합니다.