在继续之前检查文件是否在具有特定名称的文件夹中
Check if file is in a folder with a certain name before proceeding
所以,我有这个简单的脚本,可以将文件夹中的视频转换为 R4DS 可以播放的格式。
#!/bin/bash
scr='/home/user/dpgv4/dpgv4.py';mkdir -p 'DPG_DS'
find '../Exports' -name "*1080pnornmain.mp4" -exec python3 "$scr" {} \;
问题是,有些视频无效且无法播放,我已将这些视频移动到 Exports 文件夹中的其他目录。我想要做的是检查以确保文件在 运行 之前位于名为 new
的文件夹中 python 脚本,最好在 find 命令中。路径应如下所示:
../Exports/(anything here)/new/*1080pnornmain.mp4
请注意 (anything here)
文本并不表示单个目录,它可能类似于 foo/bar
、foo/b/ar
、f/o/o/b/a/r
等
您不能使用 -name
,因为搜索现在在路径上。我的第一个解决方案是:
find ./Exports -path '**/new/*1080pnornmain.mp4' -exec python3 "$scr" {} \;
但是,正如@dan 在评论中指出的那样,这是错误的,因为它不必要地使用了 globstar 通配符 (**
):
This checks if /new/
is somewhere in the preceding path, it doesn't have to be a direct parent.
所以,这里的星星是不够的。另一种可能性,仅使用 find
,可能是这个:
find ./Exports -regex '.*/new/[^\/]*1080pnornmain.mp4' -exec python3 "$scr" {} \;
这个正则表达式匹配:
new
和 .*/new
之前的任意数量的嵌套文件夹
- 任何字符(除了
/
以省略更多子路径)+ 您的文件名 [^\/]*1080pnornmain.mp4
性能可能会降低,因为它使用正则表达式。
通常,您应该选择将 find
输出的每一行传递给 xargs
,而不是使用 find
命令的 -exec
选项,因为更多高效的线程生成,例如:
find ./Exports -regex '.*/new/[^\/]*1080pnornmain.mp4' | xargs -0 -I '{}' python3 "$scr" '{}'
所以,我有这个简单的脚本,可以将文件夹中的视频转换为 R4DS 可以播放的格式。
#!/bin/bash
scr='/home/user/dpgv4/dpgv4.py';mkdir -p 'DPG_DS'
find '../Exports' -name "*1080pnornmain.mp4" -exec python3 "$scr" {} \;
问题是,有些视频无效且无法播放,我已将这些视频移动到 Exports 文件夹中的其他目录。我想要做的是检查以确保文件在 运行 之前位于名为 new
的文件夹中 python 脚本,最好在 find 命令中。路径应如下所示:
../Exports/(anything here)/new/*1080pnornmain.mp4
请注意 (anything here)
文本并不表示单个目录,它可能类似于 foo/bar
、foo/b/ar
、f/o/o/b/a/r
等
您不能使用 -name
,因为搜索现在在路径上。我的第一个解决方案是:
find ./Exports -path '**/new/*1080pnornmain.mp4' -exec python3 "$scr" {} \;
但是,正如@dan 在评论中指出的那样,这是错误的,因为它不必要地使用了 globstar 通配符 (**
):
This checks if
/new/
is somewhere in the preceding path, it doesn't have to be a direct parent.
所以,这里的星星是不够的。另一种可能性,仅使用 find
,可能是这个:
find ./Exports -regex '.*/new/[^\/]*1080pnornmain.mp4' -exec python3 "$scr" {} \;
这个正则表达式匹配:
new
和.*/new
之前的任意数量的嵌套文件夹
- 任何字符(除了
/
以省略更多子路径)+ 您的文件名[^\/]*1080pnornmain.mp4
性能可能会降低,因为它使用正则表达式。
通常,您应该选择将 find
输出的每一行传递给 xargs
,而不是使用 find
命令的 -exec
选项,因为更多高效的线程生成,例如:
find ./Exports -regex '.*/new/[^\/]*1080pnornmain.mp4' | xargs -0 -I '{}' python3 "$scr" '{}'