空字符在find -exec中断开管道

时间:2011-01-17 20:24:49

标签: pipe

我正在尝试在给定目录下找到每个Perl脚本,并运行我在其上编写的脚本。我想出了像

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

我担心某个文件名中有一个':',所以尽管我使用file的{​​{1}}选项给我一些类似

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

它不起作用。我得到了一堆--print0错误,据我所知,这表明管道已损坏。有没有:

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

    的方法
  • 1 个答案:

    答案 0 :(得分:0)

    毕竟这很简单:

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