使用Bash find识别文件夹中包含所需单词的文件

使用Bash find识别文件夹中包含所需单词的文件,bash,file,shell,video,vlc,Bash,File,Shell,Video,Vlc,我已经编写了一个非常简单的bash程序来查找具有给定名称的视频文件并在VLC中播放它们 这已经足够好了,但我似乎不知道如何使find命令也检查包含文件夹的名称 这是一个问题,因为我经常看一些系列节目,这些节目在命名为描述性文件夹中,但其文件名通常是“第1集”、“第2集”等 我不能简单地搜索文件夹本身,因为文件夹可能包含VLC无法处理的其他格式的文件 我的当前代码如下所示: A=$(find -iname "*$partOfNameToFind*" -exec echo -n '"{}" ' \

我已经编写了一个非常简单的bash程序来查找具有给定名称的视频文件并在VLC中播放它们

这已经足够好了,但我似乎不知道如何使find命令也检查包含文件夹的名称

这是一个问题,因为我经常看一些系列节目,这些节目在命名为描述性文件夹中,但其文件名通常是“第1集”、“第2集”等

我不能简单地搜索文件夹本身,因为文件夹可能包含VLC无法处理的其他格式的文件

我的当前代码如下所示:

A=$(find -iname "*$partOfNameToFind*"  -exec echo -n '"{}" ' \;  | grep   -e mp4 -e flv -e wav -e wmv | sed -e 's/\.\///g' | tr '\n' ' ')

eval vlc --nointeract $A   

任何帮助都将不胜感激

-iwholename
可能是您正在寻找的选项。虽然
-iname
仅对文件名起作用,
-iwholename
对。。。好。。。全名(路径)。;-)

再加上一些“寻找香料”,你最终可能会发现:

find . -type f \
       -iwholename "*$partOfNameToFind*" \
       \( -name "*.mp4" \
       -o -name "*.flv" \
       -o -name "*.wav" \
       -o -name "*.wmv" \
       \) \
       -exec vlc --nointeract {} +
请注意,以上内容将在文件名或目录名中匹配
$partOfNameToFind

查找-exec{}
正确地处理任何文件名,包括空格、全局字符、换行符等。尾随的
+
作为一行参数给出多个点击;如果您的查询匹配大量文件(例如,一个比shell可以处理的长度更长的列表),那么这将在多次调用
vlc
时被分解

尾随的
\
会为找到的每个文件调用一次
vlc--nointeract


尽管如此,我总是发现人类是一个真正的宝藏

使用
查找更安全-exec vlc--nointeract{}+
,因为如果文件名包含空格或全局字符,您的方法将中断。@TomFenech:printf会将文件名括在引号中,因此空格是安全的。是的,您的方法更安全(尽管任何文件名中有glob字符的人都应该得到任何可能带来的问题)——但我希望与OP的原始方法保持一定的距离。将你的变体添加到答案中。@glennjackman:叹气。。。这就是你通过“快速”回答一个“简单”的问题所得到的,主要是你在OP的问题中找到的,并且假设他说的“有效”,实际上有效…从torrents下载的文件通常在文件名中有
[]
。。。e、 g.
the.great.movie[720p].mp4
。。。唉!我确实倾向于在下载后重命名它们,但如果它们是从某人那里批量复制的,那么这一步通常会错过。