空字符破坏 find -exec 中的管道

发布于 2024-10-12 08:04:44 字数 483 浏览 4 评论 0原文

我试图找到给定目录下的每个 Perl 脚本,并运行我在它们上编写的脚本。我想出了类似

find . -type f -exec file {} \; | grep perl | awk -F':' '{print $1}' | myscript

我担心某个文件名中存在“:”的东西,所以尽管我会使用 file--print0 选项给我类似的东西

find . -type f -exec file --print0 {} \; | grep perl | awk -F'\0' '{print $1}' | myscript

它不起作用。我收到了一堆 find: `file' returned by signal 13 错误,据我所知,这表明管道损坏了。有没有:

  • 获取所有 Perl 脚本路径的更好方法,或者
  • 避免空字符破坏管道的方法

  • I'm trying to find every Perl script under a given directory, and run a script I wrote on them. I came up with something like

    find . -type f -exec file {} \; | grep perl | awk -F':' '{print $1}' | myscript

    I'm concerned about there beiong a ':' in a filename somewhere, so though I'd use file's --print0 option to give me something like

    find . -type f -exec file --print0 {} \; | grep perl | awk -F'\0' '{print $1}' | myscript

    It doesn't work. I get a bunch of find: `file' terminated by signal 13 errors instead, which I understand to be indicating a broken pipe. Is there either:

  • a better way to grab the path to all of my Perl scripts, or
  • a way to avoid the null character from breaking the pipe

  • 如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

    扫码二维码加入Web技术交流群

    发布评论

    需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

    评论(1

    鸢与 2024-10-19 08:04:44

    毕竟这真的很简单:

    find . -type f -exec file --print0 "{}" + | \
    perl -aF'\0' -lne 'print$F[0] if/perl/i'
    

    It is really simple, after all:

    find . -type f -exec file --print0 "{}" + | \
    perl -aF'\0' -lne 'print$F[0] if/perl/i'
    
    ~没有更多了~
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文