Command line 使用“查找”进行复杂和/或字符串搜索
我使用find脚本来搜索我的多媒体收藏。这在我开始添加电影预告片之前一直有效,所有的电影预告片都使用命名格式-trailer 我想使用find查找所有匹配Command line 使用“查找”进行复杂和/或字符串搜索,command-line,Command Line,我使用find脚本来搜索我的多媒体收藏。这在我开始添加电影预告片之前一直有效,所有的电影预告片都使用命名格式-trailer 我想使用find查找所有匹配*.mkv、*.mp4或*.avi的文件,同时排除任何包含字符串片段“-trailer.”,即使它匹配第一个条件(即排除文件moviename traile.mkv)。但是,以下内容包括结果中的所有拖车 find . -type f -iname '*.mkv' -or -iname '*.mp4' -or -iname '*.avi' -no
*.mkv
、*.mp4
或*.avi
的文件,同时排除任何包含字符串片段“-trailer.”
,即使它匹配第一个条件(即排除文件moviename traile.mkv)。但是,以下内容包括结果中的所有拖车
find . -type f -iname '*.mkv' -or -iname '*.mp4' -or -iname '*.avi' -not -iname '*trailer.*'
我改变了搜索顺序,但没有成功,我尝试先排除所有预告片,然后搜索其余的
我怀疑find遇到了一个文件,比如*-trailer.mkv,将其标记为true并打印它,然后在达到排除它的条件之前查找下一个文件
是否有一种方法可以按照此逻辑用括号嵌套搜索:查找所有文件(*.mkv
或*.mp4
或*.avi
),而不是(*-trail.
)
多谢
duda@coolomet:~/test$ touch a.mp4
duda@coolomet:~/test$ touch a-trailer.mp4
duda@coolomet:~/test$ find . -type f -iname '*.mkv' -or -iname '*.mp4' -or -iname '*.avi' -not -iname 'trailer.'
./a.mp4
./a-trailer.mp4
duda@coolomet:~/test$ find . -type f \( -iname '*.mkv' -or -iname '*.mp4' -or -iname '*.avi' \) -and -not -iname '*trailer.*'
./a.mp4
duda@coolomet:~/test$
您需要在iname参数中使用正确的逻辑表达式和通配符。find.|grep-P'^(((?!-预告片)。*\((mkv | avi | mp4))$”
会回来的
./movie.avi
./movie.mkv
./movie.mp4
当当前目录包含文件时
./movie-trailer.avi
./movie-trailer.mkv
./movie-trailer.mp4
./movie.avi
./movie.mkv
./movie.mp4
沃基梅德洛的反应非常有效。非常感谢。