【问题标题】:How to 'cut' on null?如何在 null 上“剪切”?
【发布时间】:2012-03-24 01:43:36
【问题描述】:

Unix 'file' 命令有一个 -0 选项来在文件名后输出一个空字符。据说这很适合与 'cut' 一起使用。

来自man file

-0, --print0
         Output a null character ‘\0’ after the end of the filename. Nice
         to cut(1) the output. This does not affect the separator which is
         still printed.

(注意,在我的 Linux 上,'-F' 分隔符没有被打印 - 这对我来说更有意义。)

如何使用 'cut' 从 'file' 的输出中提取文件名?

这就是我想做的:

find . "*" -type f | file -n0iNf - | cut -d<null> -f1

&lt;null&gt; 是 NUL 字符。

嗯,这就是我想要做的,我想做的是从具有特定 MIME 类型的目录树中获取所有文件名。我使用 grep(未显示)。

我想处理所有合法的文件名,而不是卡在带有冒号的文件名上,例如,在他们的名字中。因此,NUL 会非常好。

我想非切割解决方案也不错,但我不想放弃一个简单的想法。

【问题讨论】:

    标签: file unix null cut nul


    【解决方案1】:

    只需指定一个空分隔符:

    cut -d '' -f1
    

    (注:-d'' 之间的空格很重要,因此 -d 和空字符串作为单独的参数传递;如果您编写 -d'',那么它将作为只是-d,然后cut 会认为您正在尝试使用-f1 作为分隔符,它会抱怨,并显示错误消息“分隔符必须是单个字符”。)

    【讨论】:

    • 这可能是我唯一没有尝试过的事情!谢谢!
    • @Sukima:它对我和 OP 都有效,所以说“这根本不起作用”显然是不正确的。 OP 指定他正在使用 Linux(可能具有特定于 Linux 的背景——man file 说他可以使用cut 分割空字符)。由于您的情况不同,您可能需要提出一个新问题。
    • cut: bad delimiter 在 OSX 上。
    • @DanieleOrlando:是的。请阅读您上面的 cmets。
    • 谢谢。不幸的是,这不适用于busybox版本的cut。
    【解决方案2】:

    这适用于 gnu awk。

    awk 'BEGIN{FS="\x00"}{print$1}'

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      相关资源
      最近更新 更多