1つ以上のファイルを含むフォルダを検索するのに役立ちますが、同じフォルダにファイルがない場合は、*.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'])
少なくとも1flac
秒、2〜6txt
秒、およびなしを含むディレクトリの場合cue