다음으로 끝나는 파일을 어떻게 나열하시겠습니까?x, y 또는 z다음으로 끝나지 않는 하위 디렉터리에서x, y 또는 z?
답변1
드롭을 완전히 방지 하고 *[xyz]
깊이가 2인 일반 파일(예: find a/x
, nor ax/x
nor , 두 디렉터리를 넘지 않음)의 경우 a/b
POSIXly :x
a/b/x
LC_ALL=C find . \( ! -name '*[xyz]' -o -prune \) \
-path './*/*' -prune -type f -name '*[xyz]'
이는 다음과 같습니다.
printf '%s\n' *[!xzy]/*[xyz]
무엇보다도 숨겨진 디렉터리와 숨겨진 파일을 찾고 디렉터리에 대한 심볼릭 링크는 찾지 않고 일반 파일만 찾습니다.
*[xyz]
어떤 깊이의 일반 파일도 찾고 싶다면직접상위 디렉토리는 GNU로 끝나지 않습니다 xyz
(따라서 x
, a/x
, a/b/x
는 발견되지만 nor 는 x/b/x
발견되지 않음 ) .x/x
a/x/x
find
LC_ALL=C find . -regex '.*[^xyz]/[^/]*[xyz]' -type f
그리고 zsh
:
setopt extended_glob
printf '%s\n' **/*[xzy]~*[xyz]/[^/]#(D.)
POSIX적으로:
LC_ALL=C find . -name '*[xzy]' -type f -exec sh -c '
for f do
case ${f%/*} in
*[xzy]) ;;
*) printf '%s\n' "$f"
esac
done' sh {} +
하위 디렉토리에서도 내부를 전혀 보고 싶지 않은 경우 *[xyz]
(즉, 보고 싶지 않은 경우 x/a/x
) 다음과 같습니다.
find . -name '*[xyz]' -prune -type f
-prune
find
디렉터리에 들어가지 말라고 지시 하고 true를 반환합니다.
또는 다음을 사용하여 zsh
:
setopt extended_glob
printf '%s\n' (*[^xyz]/)#*[xyz](D.)
답변2
1
다음의 파일에만 사용할 수 있습니다.모두임의 깊이의 하위 디렉터리:
(스티븐 체이저러스 이후)
find . -name '*[xyz]' -prune -type f
2
깊이가 2인 하위 디렉터리에만 있는 파일의 경우 다음을 시도해 보세요.
(비표준 옵션도 포함합니다. 아직은 대략적인 이해로 생략을 잘 못합니다. 자세한 내용은 댓글을 참고해주세요.)
find . -mindepth 2 -maxdepth '2' -wholename "./*[^xyz]/*[xyz]" -type f 2>/dev/null
find
파일 찾기
.
find가 현재 디렉터리에서 시작하도록 지시
-mindepth 2
검색이 현재 디렉터리 1레벨 깊이부터 시작되어야 함을 나타냅니다.
-maxdepth 2
검색이 현재 디렉터리보다 한 수준 더 깊게 종료되어야 함을 나타냅니다.
-wholename
파일 경로 정의 값 ./*[^xyz]/*[xyz]
은 질문에서 정의한 것입니다.
-type f
find에게 파일만 찾도록 지시
2>/dev/null
오류 메시지를 인쇄하지 않도록 찾기에 지시
삼
파일뿐만 아니라 디렉터리도 원하는 경우 다음이 더 쉽습니다.
ls -d *[^xyz]/*[xyz]
ls
파일과 디렉터리를 나열하는 데 사용됩니다.
ls -d
디렉토리에 콘텐츠를 표시하지 않는 ls
옵션 포함-d
고쳐 쓰다
파일 확장자를 포함하지 않고 파일 이름 끝으로 검색 기준을 변경하는 방법이 궁금합니다. 검색하면 파일이 표시됩니다지file.ab 대신 .abc지
그러면 현재 디렉토리에 목록이 표시됩니다.
ls -d *[xyz].???
Linux에서는 생각하는 것처럼 파일에 확장자가 없습니다. 확장자는 파일 이름의 일부입니다. 이전 명령, 특히 첫 번째 명령을 모두 다시 작성하는 것은 약간 복잡합니다.
1.
(지금까지 생각해낸 것 중 최고입니다.)
find . -path '.*[^xyz]/*[xyz].???' -type f | grep -v [xyz]/
2.
find . -mindepth 2 -maxdepth '2' -wholename "./*[^xyz]/*[xyz].???" -type f 2>/dev/null
삼.
ls -d *[^xyz]/*[xyz].???