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:~$
現在,我
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:~$
但是當我
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:~$
那麼,為什麼在使用
xargs & du -h
.
在這種情況下,您實際上並不需要 xargs:
du -h -- *.mkv | awk '{print $1}'
無論如何,要解決您的問題
ls *.mkv | xargs du -h | awk '{print $1}'
為我工作,bash4.2
使用
xargs
有時會令人困惑。如果您想可靠地使用它,您應該將其輸入\0
分開,即ls | tr \\n \\0 | xargs -0 stat
為了將換行符更改為
\0
s,或者做(如果你有最近的xargs
)ls | xargs -d \\n stat