“xargs”和“file”出现奇怪的“No such file”错误

jam*_*hid 8 shell bash xargs

我想获取当前目录下所有文件的 MIME 类型。为什么这不起作用?我已经在 OSX 或 Linux 上测试过 bash。“文件”抱怨它找不到文件,但如果我用完全相同的路径运行它,它就可以工作。

$ find . -type f | xargs -n 1 -I FILE echo $(file --mime-type -b FILE)
ERROR: cannot open './foo.txt' (No such file or directory)
...
$ file --mime-type -b ./foo.txt
text/plain
Run Code Online (Sandbox Code Playgroud)

当然,在现实世界中,我不只是“回显”响应,我需要在另一个命令中使用 MIME 类型字符串。

这是我能解决的最简单的问题。我想我不了解xargs文件名替换?

iru*_*var 5

命令替换$(file --mime-type -b FILE)在传递给 之前由 shell 执行xargs,这就是为什么您没有看到您需要的内容。引用$(file --mime-type -b FILE)bash -c通过 xargs传递给它

find . -type f | xargs -n 1 -I FILE bash -c  'echo $(file --mime-type -b FILE)'
Run Code Online (Sandbox Code Playgroud)

  • ...因此创建一个名为“FILE”的文件将很好地证明这一点。 (2认同)