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

Using Bash find to identify files whose folder contains a desired word

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

这很好用,但我似乎无法弄清楚如何使 find 命令也检查包含文件夹的名称。

这是个问题,因为我经常看连续剧,它们在描述性命名的文件夹中,但文件名通常是 "episode 1"、"episode 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 spice",您最终可能会发现:

find . -type f \
       -iwholename "*$partOfNameToFind*" \
       \( -name "*.mp4" \
       -o -name "*.flv" \
       -o -name "*.wav" \
       -o -name "*.wmv" \
       \) \
       -exec vlc --nointeract {} +

请注意,以上内容将匹配 文件 目录名称中的 $partOfNameToFind

find ... -exec {} 正确处理任何文件名,包括空格、全局字符、换行符或诸如此类的东西。尾随的 + 将多个匹配作为一行参数;如果您的查询匹配 lots 个文件(例如,一个列表比 shell 可以处理的更长),这将被分解为 multiple 调用 vlc.

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

综上所述,我始终发现 man find 是一个 真正的 宝库。 ;-)