。実際、私のシステムでは、-ls
の出力は、ls
コマンド自体の出力に影響を与えるさまざまな環境変数の影響を受けません。私は-ls
パラメータの形式がfind
の内部であり、実際のls
コマンドには関係しないと仮定します。私には、これはプログラミングに意味があります。なぜ外部コマンドを実行するのですか?ディスプレイをシミュレートするだけです。
これを回避するには、実際にls
コマンドに結果を渡すために、-exec
または-print0
を使用することが考えられます。少しの警告:ディレクトリの名前を渡すと、ls
はそのディレクトリの内容を表示するので、を入力するか、find
クエリに-type f
を追加する必要があります。私は、Linux上で見つけるのマンページをチェックして、私の検索クエリに, so I used that. Since
-d is included, I didn't have to add
型-f`を-dilsと同じ出力すると仮定だことがわかった:これは-exec
を使用している
一人ひとりを送信しますファイルまたはディレクトリを個別にls
コマンドに追加します。 10,000ファイルがある場合、ls
は10,000回呼び出されます。
$ find /directory -xdev -exec ls -dils --time-style=long-iso {} \;
これ多分、より効率的な:コマンドバッファに収まると
ls
コマンドに一度、それらを通過しますできるだけ多くのファイル名
$ find /directory -xdev -print0 | xargs -0 ls -dils --time-style=long-iso
この意志グループ。すべてのファイルを完了するために必要な回数だけls
コマンドを呼び出します。たとえば、find
コマンドに10,000個のファイルがある場合、ls
コマンドは10,000回ではなく1回または2回呼び出されます。
問題はxargs
が面白いのファイル名に問題があり、マニュアルページで指摘したように、いくつかのセキュリティ上の問題があるということです。
xargsのが安全に使用するために常にそこにするので、それは、可能ではありません入力ファイルのリストの作成とxargsが発行するコマンドでのそれらの使用の間に時間差があること。他のユーザーがシステムにアクセスできる場合は、この時間枠中にファイルシステムを操作して、xargsが実行されていないファイルにxargsコマンドを強制的に適用できます。この問題と関連する問題の詳細については、Texinfoのfindutilsドキュメントの「Security Considerations」の章を参照してください。 findの-execdirオプションは、しばしばより安全な代替手段として使用できます。
-print0
パラメータはNL
の代わりにファイル名を分離するNUL
文字を使用し、-0
パラメータが$IFS
環境で空白(文字ではなく、ファイル名の区切りとしてNUL
文字を使用するxargs
を伝えます変数)。
これはほとんどの場合、-print0 | xags -0
の作業を使用していることを意味しますが、まだ-exec ls
が良い方法であると判断することがあります。
-0とともに使用すると、xargsに「面白いファイル名」の問題はありません。 lsを効率的に使用するもう1つの方法は、-exec ... +を使用することです。セキュリティに関して、上で引用したポイントは、ファイルが-lsまたはlsの出力で表示されるかどうか、どのように表示されるかに関係するセキュリティ関連の影響がある場合にのみ違いがあります。 –