2014-01-07 13 views
5

私は何かが変更されたかどうかを確認するために時々比較ファイルリストを生成するには、次のコマンドを使用します。「見つける-ls」

find /directory -xdev -ls 

私の問題は、出力に時間があるということです常に同じ形式でない:LS-コマンドについては

Sep 19 08:48 ./pool/f/f/0/ff046cc5b7188073cbd68207c52bddc5 
Nov 2 06:24 ./pool/f/f/0/ff0e803c36d89315a6b3663ed1295f71 
Jan 18 2012 ./pool/f/f/0/ff07f60465d8deb7a1aa38096d0b798d 
Jan 18 2012 ./pool/f/f/0/ff07436f519bddf1d340afde5a240375 

すべてのファイルに対して同じ時間形式を強制する--time-フォーマット=長期ISOオプションがあります。 これをfindコマンドと組み合わせることはできますか? -lsパラメータのフォーマットの変更についての私のmanページでは何もないあなたが-printfするさまざまなオプションを使用することができます

おかげ

答えて

2

。実際、私のシステムでは、-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

-0とともに使用すると、xargsに「面白いファイル名」の問題はありません。 lsを効率的に使用するもう1つの方法は、-exec ... +を使用することです。セキュリティに関して、上で引用したポイントは、ファイルが-lsまたはlsの出力で表示されるかどうか、どのように表示されるかに関係するセキュリティ関連の影響がある場合にのみ違いがあります。 –

3

(男性が見つける。)

find . -printf "%CY-%Cm-%Cd %CH:%CM\n" 
+0

Dang。 GNU版の 'find'では' -printf'を忘れていました。他のUnixシステムには '-printf'パラメータはありませんので、普遍的ではありません。私のMacでは、 '-printf'は存在しません。しかし、OPが '--time-style'を' ls'で使っているなら、彼はGNUツールを持っていて、 '-printf'はうまくいくはずです。 –

+0

FWIW -printfは、シンボリックリンクで使用するx - > y表記をシミュレートできません。 –