폴더의 일부 파일을 보고 싶지만 하위 디렉터리는 보고 싶지 않습니다.
디렉토리를 제외하고 싶지는 않지만모두!
나는 이것을 시도했다~에서
find "$dir" -name '*.out' -type d -prune
그러나 결과는 아무것도 나오지 않는다는 것입니다. 도움이 필요하세요?
답변1
작업(모든 하위 디렉터리를 제외한 폴더에서 파일 찾기)을 수행하는 가장 쉬운 방법은 다음과 같습니다.
find $dir -maxdepth 1 -type f -name '*.out' -o '.*.out'
@StevenPenny와 @RalfFriedlal이 쓴 것처럼 maxlength 옵션이 여러분이 찾고 있는 것입니다.
찾기 매뉴얼에서: -max 깊이 수준은 시작점 아래의 대부분의 (음수가 아닌 정수) 디렉터리 수준으로 내려갑니다. -maxlength 0은 시작점 자체에만 테스트와 작업을 적용한다는 의미입니다.
-type f
: 일반 파일을 검색하고 있습니다
-name '*.out' -o '.*.out'
. -o는 또는 검색에 .out 확장자를 가진 최종 숨김 파일을 포함할 수 있음을 의미합니다.
죄송합니다. 제 영어 실력이 좋지 않습니다.:(
답변2
설명서를 보고 시도해 보셨나요?
-maxdepth
@StevenPenny가 이미 작성한 것처럼 당신이 찾고 있는 옵션은 입니다 .
아무것도 얻지 못하는 이유 중 하나는 (설명서에서)
전체 표현식에 -prune 또는 -print 이외의 작업이 포함되어 있지 않으면 전체 표현식이 true인 모든 파일에 대해 -print가 수행됩니다.
따라서 귀하의 선택이 포함되어 있으므로 -prune
아무 것도 암시되지 않습니다 -print
. 귀하의 명령은 이름이 지정된 디렉터리만 삭제합니다 *.out
.
정말로 사용하고 싶다면 -prune
다음을 수행하십시오.
find "$dir"/* -type d -prune -o -name '*.out' -print
이는 디렉토리 "$dir"/*
로 사용되며 "$dir"
정리됩니다. 이는 find
최대 매개변수 길이에 의해 제한되지 않는다는 이점을 무효화합니다.
답변3
find
여기서는 실제로 이것이 전혀 필요하지 않은 것 같습니다 .
for pathname in "$dir"/*.out; do
[ ! -f "$pathname" ] && continue
# do whatever you need to do to "$pathname" here
done
테스트 후에는 -f
일반 "$pathname"
파일이나 일반 파일에 대한 심볼릭 링크를 가리킵니다. *
점으로 시작하는 파일 이름과 일치하는 항목이 없기 때문에 숨겨진 파일은 건너뜁니다 ( 사용할 수도 있고 사용하지 않을 수도 있는 dotglob
쉘 옵션이 에 설정되지 않은 경우).bash
그리고 find
:
find "$dir" -mindepth 1 -type d -prune -o -type f -name '*.out' -print
이로 -mindepth 1
인해 시작 디렉토리가 정리되지 않습니다 -type d -prune
. -print
는 발견된 경로 이름에 대해 수행하려는 작업으로 대체되어야 합니다 (이것은 이름이 로 끝나는 일반 파일입니다 .out
).
또는,
find "$dir" ! -path "$dir" -type d -prune -o -type f -name '*.out' -print
이는 표준 find
옵션만 사용하고 시작 경로와 다른 모든 디렉터리를 정리합니다.
또는,
find "$dir" -maxdepth 1 -type f -name '*.out' -print
-maxdepth 1
find
더 간단히 말하면, 사용은 시작 디렉터리의 하위 디렉터리로 내려가는 것을 중지합니다 .
-mindepth
및 옵션은 -maxdepth
일반적으로 사용 가능하지만표준 find
명령, 구현에 find
이러한 항목이 없으면 쉘 루프나 (with )만 find
사용하는 대안을 사용해야 합니다.-prune
-path
답변4
그리고 zsh
:
printf '%s\n' $dir/*.out(^/) # files of any type except directory (excluding
# hidden ones)
printf '%s\n' $dir/*.out(-^/) # same but also excludes symlinks to directories
printf '%s\n' $dir/*.out(.) # regular files only (excluding hidden ones)
printf '%s\n' $dir/*.out(-.) # regular files or symlinks to regular files
# (excluding hidden ones)
printf '%s\n' $dir/*.out(D-.) # same, but include hidden ones.