使用 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
是一个 真正的 宝库。 ;-)
我写了一个非常简单的 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
是一个 真正的 宝库。 ;-)