15

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

<null>NUL 字符在哪里。

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

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

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

4

2 回答 2

21

只需指定一个空分隔符:

cut -d '' -f1

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

于 2012-03-24T01:47:41.560 回答
0

这适用于 gnu awk。

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

于 2022-02-04T17:09:30.030 回答