하나 이상의 파일이 포함된 폴더를 검색하는 데 도움이 필요하지만, 동일한 폴더에 파일이 없으면 *.flac
폴더 이름을 인쇄하세요.*.cue
이에 대해 작동하는 echo, find, grep, ls, perl, 스크립트 명령 등이 있습니까?
macOS 터미널에서 zsh를 사용하고 있습니다... 감사합니다!
답변1
zsh glob만 사용하면 쉽게 이 작업을 수행할 수 있습니다.
has() ()(($#)) $REPLY/?*.$1(NDY1)
print -rC1 -- **/*(NDFe['has flac && ! has cue'])
D
숨겨진 파일/디렉토리를 무시하려면 s를 제거하십시오. 그런 다음 ?
이름이 지정된 숨겨진 파일이 .flac
루트 이름이 비어 있는 flac 파일이 아니라 확장명이 없는 숨겨진 파일로 처리 되도록 하기 위해 사용한 flac 파일을 제거할 수도 있습니다 .
예를 들어 참조하십시오.zsh의 특정 파일 및 파일 유형 존재에 대한 조건부 테스트여기에서 사용된 건축 유형에 대한 자세한 내용을 확인하세요.
이를 다음과 같이 확장할 수 있습니다.
has_at_least() ()(($# >= $1)) $REPLY/?*.$2(NDY$1)
print -rC1 -- **/*(NDFe['has_at_least 3 flac && ! has_at_least 1 cue'])
파일이 3개 이상 있고 파일이 flac
없는 디렉터리의 경우 cue
.
또는:
has_from_to() ()(($# >= $1 && $# <= $2)) $REPLY/?*.$3(ND)
print -rC1 -- **/*(NDFe['has_from_to 1 inf flac && has_from_to 0 0 cue'])
또는 실제로 다음과 같은 것을 좋아하고 수행합니다.
has() {
local -A minmax=("$@") count
local file ext n=${#minmax}
for file ($REPLY/?*.*(ND)) (( ++count[\$file:e] ))
for ext ("${(k@)minmax}")
(( count[\$ext] >= ${minmax[$ext]%-*} &&
count[\$ext] <= ${minmax[$ext]#*-} &&
n-- ))
(( n == 0 ))
}
print -rC1 -- **/*(NDFe['has flac 1-inf txt 2-6 cue 0-0'])
최소 1 flac
초, 2~6 txt
초 및 없음이 포함된 디렉터리의 경우cue