我有一个远程目录,除了读取文件之外我没有任何权限。
通常我会运行自定义服务器范围的脚本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
但这不起作用。由于我无法移动文件或将其复制到别处,我认为唯一的解决方案是弄清楚如何将它们作为两组图像进行管道传输。任何建议将不胜感激!
答案 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 dostuff
。 xargs
将使用(stdin stream of)文件名作为参数列表调用dostuff。如果文件列表超过max bash命令行长度(32KB),则xargs将其分成多次调用dostuff。