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 会非常好。
我想非切割解决方案也很好,但我不想放弃一个简单的想法。
最佳答案
只需指定一个空分隔符:
cut -d '' -f1
(注意:
-d
和''
之间的空格很重要,因此-d
和空字符串作为单独的参数传递;如果你写-d''
,那么它将作为-d
传递” ,然后cut
会认为您尝试使用-f1
作为分隔符,它会提示,并显示“分隔符必须是单个字符”的错误消息。)
关于file - 如何 'cut' 为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9848426/