如何将grep传递给使用仅具有读取权限的目录的程序

时间:2018-02-01 03:25:23

标签: linux shell grep find pipe

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

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

dostuff /path/to/images/*img

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

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

其中Xs从1-900一起递增,Ys有一些任意数字。

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

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

所以我试过

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

但这不起作用。由于我无法移动文件或将其复制到别处,我认为唯一的解决方案是弄清楚如何将它们作为两组图像进行管道传输。任何建议将不胜感激!

2 个答案:

答案 0 :(得分:1)

假设您有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 {} \;
-regextype posix-extended -regex中的

find选项提供grep -E类型功能。

{}是找到的匹配模式。

-exec dosomestuff {}将_do_some_stuff_添加到匹配的{}

答案 1 :(得分:0)

您可以将find...|grep...命令放在反引号中,并将该参数设为dostuff。更好的是管道find ... | grep ... | xargs dostuffxargs将使用(stdin stream of)文件名作为参数列表调用dostuff。如果文件列表超过max bash命令行长度(32KB),则xargs将其分成多次调用dostuff。