Bash

使用 xargs 時沒有此類文件或目錄錯誤

  • March 7, 2022

我有一些帶有.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

為了將換行符更改為\0s,或者做(如果你有最近的xargs

ls | xargs -d \\n stat

引用自:https://unix.stackexchange.com/questions/52755