xargs を使用すると、対応するファイルまたはディレクトリエラーはありません。

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

答え1

使用法がxargs時々混乱することがあります。確実に使用するには、入力を切り離す必要があります\0

ls | tr \\n \\0 | xargs -0 stat

改行文字をsに変更するには\0(最近持っている場合xargs

ls | xargs -d \\n stat

答え2

この場合、実際にxargsは必要ありません。du -h -- *.mkv | awk '{print $1}'

とにかく問題を解決してみてください。ls *.mkv | xargs du -h | awk '{print $1}'

ここに画像の説明を入力してください。

私のために働く、bash4.2

答え3

あなたのコマンドは少しRube Goldbergに似ています。ファイルのリストを取得します*.mkv。これらのファイルを一覧表示します(印刷できない一部の文字をおおよその表現に置き換えることができます)。リストを解析します(リストの生成方法と完全に一致しない一部の解析ルールを使用)。解析された各要素をduコマンド(複数の引数を受け入れることができる)に渡します。

このlsコマンドはワイルドカード文字を拡張せず、代わりにシェルがワイルドカード文字を拡張します。出力を解析しません。ls、ほとんど必要はなく、しばしば何かを破る。

このコマンドの入力形式は、xargs他のコマンドによって生成された形式と一致しません。うん、変です。を使用すると、インデントが-I無視xargsされるため、最初のスペースを含むファイル名が破損します。xargsこのオプションと一緒に使用し-0たり、入力に混同されている文字が含まれていないことを知っている場合を除き、使用しないでください。

書く

du -h *.mkv | awk '{print $1}'

答え4

私の考えには「-0」が必要だと思います。

https://man7.org/linux/man-pages/man1/xargs.1.html

Unixファイル名にはスペースと改行文字を含めることができるため、これらのデフォルトの動作はしばしば問題になります。 xargsは、スペースや改行文字を含むファイル名を誤って処理します。このような場合は、これらの問題を回避するために-0オプションを使用することをお勧めします。このオプションを使用するときは、xargsへの入力を生成するプログラムがヌル文字を区切り文字として使用していることを確認する必要があります。たとえば、プログラムがGNU findの場合、-print0オプションはこれを行います。

関連情報