如何将 grep 通过管道传输到使用仅具有读取权限的目录的程序中



我有一个远程目录,除了读取文件之外,我没有任何权限。

通常,我运行一个自定义的服务器范围的脚本,dostuff,如下所示:

dostuff /path/to/images/*img

但是,此目录意外地具有两组名称非常相似的不同文件(每个文件数相同(:

13-08_1_0XXX.img
13-08_1_0XXX_16YYYY.img

其中 X 从 1-900 一起递增,而 Y 有一些任意的数字。

例如,我可以使用以下方法正则表达式为第一组选择文件名:

find . | grep -E -w -o ".{12}.img"

所以我尝试了

find /path/to/images/ | grep -E -w -o ".{12}.img" | dostuff

但这行不通。由于我无法移动文件或将它们复制到其他地方,我认为唯一的解决方案是弄清楚如何将它们作为两组单独的图像通过管道传输到脚本中。任何建议将不胜感激!

假设你有GNU findutils,以下内容应该可以工作:

$ find /path/to/imagedir -regextype posix-extended 
  -regex '.*/13-08_1_0([1-9][0-9][0-8]|900)(.img|_16[0-9]+{4}.img)' -exec dosomestuff {} ;

find 中的-regextype posix-extended -regex选项提供了grep -E类型功能。

找到的匹配模式{}

-exec dosomestuff {}将_do_some_stuff_匹配的{}

您可以将 find...|grep... 命令放在反引号中,并将其作为 dostuff 的参数。更好的是管道到find ... | grep ... | xargs dostuff. xargs将使用(stdin流(文件名调用dostuff作为参数列表。如果文件列表超过最大 bash 命令行长度 (32KB(,xargs 会将其分解为对 dostuff 的多次调用。

最新更新