使用 xargs 时没有此类文件或目录错误

Ran*_*Rag 5 ls bash xargs

我有一些带有.mkv扩展名的文件,我想使用du -h. 一些文件前面有whitespace字符。

ranveer@ranveer:~$ ls *.mkv
Arrow.S01E02.720p.HDTV.X264-DIMENSION_(1)  [SHYAMPAREEK.IN].mkv
mymediafirefreefreak.com_The.Mentalist.S05E04.480p.HDTV.X264-mRS.mkv
SHYAMPAREEK.IN-The.Vampire.Diaries.S04E02.720p.HDTV.X264-DIMENSION_(1).mkv
Supernatural.S08E03.720p.HDTV.X264-DIMENSION_(1)SHYAMPAREEK.IN].mkv
  [WWW.SHYAMPAREEK.IN].Arrow S01E01 480p HDTV.mkv
 [WWW.SHYAMPAREEK.IN].Castle.2009.S05E03.480p.HDTV.x264-mSD.mkv
ranveer@ranveer:~$ 
Run Code Online (Sandbox Code Playgroud)

现在,我使用xargs应用于du -h每个文件,但对于前面有whitespace字符的文件,我收到No such file or directory错误。

ranveer@ranveer:~$ ls *.mkv | xargs -I f du -h "f" | awk '{print $1}'
du: cannot access `[WWW.SHYAMPAREEK.IN].Arrow S01E01 480p HDTV.mkv': No such file or directory
du: cannot access `[WWW.SHYAMPAREEK.IN].Castle.2009.S05E03.480p.HDTV.x264-mSD.mkv': No such file or directory
186M
151M
185M
186M
ranveer@ranveer:~$ 
Run Code Online (Sandbox Code Playgroud)

但是当我du -h单独申请这些文件时,它工作正常。

ranveer@ranveer:~$ du -h "  [WWW.SHYAMPAREEK.IN].Arrow S01E01 480p HDTV.mkv"
151M      [WWW.SHYAMPAREEK.IN].Arrow S01E01 480p HDTV.mkv
ranveer@ranveer:~$ 
Run Code Online (Sandbox Code Playgroud)

那么,为什么我在使用xargs & du -h.

glg*_*lgl 5

使用xargs有时会令人困惑。如果你想可靠地使用它,你要么应该将它的输入\0分开,即

ls | tr \\n \\0 | xargs -0 stat
Run Code Online (Sandbox Code Playgroud)

为了将换行符更改为\0s,或者执行(如果您最近有xargs

ls | xargs -d \\n stat
Run Code Online (Sandbox Code Playgroud)


dai*_*isy 3

在这种情况下,你实际上并不需要 xargs:du -h -- *.mkv | awk '{print $1}'

无论如何,解决你的问题ls *.mkv | xargs du -h | awk '{print $1}'

在此输入图像描述

对我有用,bash4.2