xargsを結合して「ls -1」を引用符で印刷するにはどうすればよいですか?

xargsを結合して「ls -1」を引用符で印刷するにはどうすればよいですか?

ls複数のディレクトリを一覧表示するには、次のコマンドを実行します。フォルダの空き領域を確認してくださいX y

ls -1d 2021*/"X y"/foobar

出力は次のとおりです

'20211121-161518-801/X y/foobar'
'20211128-151513-585/X y/foobar'
'20211130-170001-724/X y/foobar'

lsはここでも引用符を使用しているようです。ただし、この出力を引用符とxargs組み合わせると、継ぎ目が失われます。

ls: Zugriff auf '20211121-161518-801/X' nicht möglich: Datei oder Verzeichnis nicht gefunden
ls: Zugriff auf 'y/foobar' nicht möglich: Datei oder Verzeichnis nicht gefunden

xargs コマンドは次のとおりです。

ls -1d 2021*/"X y"/foobar | xargs ls

結局私はaを使いますが、xargs rm -rfこれはxargs ls単なるテストです。

ベストアンサー1

Stéphane Chazelasは、「現代」について一般的に見事で深い探求を提供しますが、lsすべてのlsesが同じになるわけではありません。新しいGNUがls登場しても、--zeroどこにも広がるには数十年かかりますが、まだすべてのシステム、特にGNUベースではないシステムでは機能しません。

一般的な合意は、lsこれが人間が消費することであり、実際に他の目的で信頼してはならないということです。

これは以前の管理者の間でかなり常識的ですが、Linuxがニッチ市場を超えて徐々に主流環境と国家化環境に移行するにつれて、新しい管理者と初心者管理者はまだ理解できない(または説明できない)理由で新しい管理者と初心者管理者のみを使用しますしますlsls(あなたの状況でわかるように)深刻な問題になります。これがGNUが何十年にもわたって「急速に」発展してきており、誰にでも選択肢が必要な理由ですlsls

ただし、この問題を即時に、信頼性が高く、安全に解決し、タスクを正しく実行するには、ゼロfind区切りリストジェネレータまたは直接コマンドランチャーとして正しいツールがコマンドです。

findゼロで区切られたリストジェネレータとして使用されます。

find topdir -mindepth 1 [-maxdepth 2] -type d -print0 | xargs -0 -I@ stat @

find直接実行者として使用:

find topdir -mindepth 1 [-maxdepth 2] -type d -exec stat '{}' \;

-mindpeth/を使用すると、ドロップ-maxdepth深度を制御し、find処理-typeするオブジェクトを制御できます。オブジェクト名またはオブジェクトパスも一致させることができます。オブジェクト名は基本的に「インテリジェントな」方法で破損またはエスケープされないため、find恐れなくパイプ(ジェネレータ)またはargvベクトル(ランチャー)の一部としてこれらのアイテムを元のオブジェクトに渡すことができます。

この方法でリストをパイピングするときは、-print0常に名前がゼロで区切られ、他の文字(スペースや改行など)を直接表現できるようにして、読者が混同しないようにする必要があることに注意してください。

おすすめ記事