*.srt 파일만 포함하고 폴더에 다른 파일은 포함하지 않은 모든 폴더를 검색하려면 어떻게 해야 합니까?
답변1
이라는 파일이 포함된 디렉터리를 찾은 *.srt
다음 이라는 파일이 포함된 디렉터리를 찾습니다.아니요이름을 지정 *.srt
하고 첫 번째 목록에 고유한 디렉터리만 유지합니다.
comm -23 \
<(find . -type f -name \*.srt -printf '%h\n' | sort -u) \
<(find . ! -name \*.srt -printf '%h\n' | sort -u)
답변2
find
쉘 사용 bash
: 각 디렉토리에 대해 파일 이름이 일치하는지 확인하십시오 *.srt
. 그렇다면 해당 이름의 수가 일치하는지 확인하십시오 *
. 이 경우 디렉토리 경로를 인쇄하십시오.
find . -type d -exec bash -O nullglob -c '
for dirpath do
list1=( "$dirpath"/*.srt )
if [[ ${#list1[@]} -gt 0 ]]; then
list2=( "$dirpath"/* )
if [[ ${#list1[@]} -eq ${#list2[@]} ]]; then
printf "%s\n" "$dirpath"
fi
fi
done' bash {} +
또는 인라인 스크립트 bash -c
에 깊게 중첩되지 않은 경우 :
find . -type d -exec bash -O nullglob -c '
for dirpath do
list1=( "$dirpath"/*.srt )
[[ ${#list1[@]} -eq 0 ]] && continue
list2=( "$dirpath"/* )
[[ ${#list1[@]} -ne ${#list2[@]} ]] && continue
printf "%s\n" "$dirpath"
done' bash {} +
*.srt
두 목록의 길이를 비교하는 대신(배열 저장) 확장된 와일드카드 패턴을 사용하여 일치하지 않는 이름을 일치시킵니다 . 위치 인수 목록을 사용하여 약간의 입력 시간을 절약할 수도 있습니다.
find . -type d -exec bash -O extglob -O nullglob -c '
for dirpath do
set -- "$dirpath"/*.srt
[[ $# -eq 0 ]] && continue
set -- "$dirpath"/!(*.srt)
[[ $# -ne 0 ]] && continue
printf "%s\n" "$dirpath"
done' bash {} +