当有太多匹配文件时,bash
如果您在命令行上包含 glob 模式,则 shell 会像中断一样
perl -pi -e 's/hi/bye/' too_many_files*
Run Code Online (Sandbox Code Playgroud)
您可以使用xargs
、 gnuparallel
或来解决此find
问题,但对于复杂的命令,这些命令可能很难在引用方面正确使用,而且它们的效率也可能低于运行perl
一次。
有没有办法使用 的perl
内置通配支持来实现类似的功能?(这不起作用)
perl -pi -e 's/hi/bye/' 'manyfiles*' # <-- Does not work.
Run Code Online (Sandbox Code Playgroud)
正如此答案中所述,您可以使用BEGIN
块perl
(而不是 shell)来扩展文件列表:
在原来的基础上稍作修改:
将 globing 留给 perl 而不是 bash,后者有局限性,
Run Code Online (Sandbox Code Playgroud)perl -pi -e 'BEGIN{ @ARGV = glob(pop) } s/#//g' "*"
或者当 Globed 目录中有空格时,
Run Code Online (Sandbox Code Playgroud)perl -MFile::Glob=bsd_glob -pi -e 'BEGIN{ @ARGV = bsd_glob(pop) } s/#//g' "*"
有关glob
vs的更多信息bsd_glob
,请参阅这篇文章。
(这是故意重复的,因为我很难用我想到的搜索词快速找到答案。)