2013-04-30 21 views
18

出力の最初のフィールドに指定された数値より大きい行をgrepしようとしています。この例では、その番号は755です。最終的に、私がやっていることは、stat -c '%a %n' *を使って755より大きい(そして等しくない)特権を持つすべてのファイルをリストアップしようとしていて、この最終的なリストを得るためにgrep'ing(あるいはsed'ing?これがどのようにして最高の成果を収めることができるのか?与えられた数字より大きい数字のグレープ・ライン

+2

'755'は実際にはビットのシーケンスを表す8進数なので、「より大きい」とはどういう意味ですか? '666'は全員に書き込みアクセス権を与えます。それは "755"よりも大きいのですか? '755'は' '666'よりも大きいですか? –

+0

OS Xのユーザ: 'stat -c '%a%n' *'(Linux)に相当するのは 'stat -f '%Lp%N' *' ' – mklement0

+0

です。 awk? – Soncire

答えて

20

この試してください:あなたは自分の最終的な出力にファイル名をしたい場合は、特権番号をスキップし、

stat -c '%a %n' *|awk '$1>755' 

をできます

stat -c '%a %n' *|awk '$1>755{print $2}' 

EDIT

実際にあなたが可能性awk内でchmodを実行してください。ユーザーがawk行を実行する際に、それらのファイルを変更する権限があることを確認する必要があります。

stat -c '%a %n' *|awk '$1>755{system("chmod 755 "$2)}' 

ここでも、ファイル名にスペースがないものとします。

+0

あの小さなアドオンをありがとう。私はフィールド2を切り抜けるつもりでしたが、あなたのパイプは1つ少ないパイプで実現します! – user2150250

+0

ファイル名にスペースがないように注意してください。 –

+1

@ user2150250注:私の2番目のawk one-linerは、ファイル名にスペースがないことを前提としています。 – Kent

5

私はawk(1)を使用したい:

stat -c '%a %n' * | awk '$1 > 755' 

awkパターンが最初のフィールドは、行または別の何かのサブセットを印刷したい場合は、アクションを追加することができます755次に大きいの線と一致し、 (@ Kentの答えを参照)。

3

どちらもgrepでもsedでも演算には適していません。 awkが助けになることがあります(残念ながら私はそれを知らない)。しかしfindは、あまりにも、ここでは便利なことができることに注意してください:

-perm mode 
      File's permission bits are exactly mode (octal or symbolic). 
      Since an exact match is required, if you want to use this form 
      for symbolic modes, you may have to specify a rather complex 
      mode string. For example -perm g=w will only match files which 
      have mode 0020 (that is, ones for which group write permission 
      is the only permission set). It is more likely that you will 
      want to use the `/' or `-' forms, for example -perm -g=w, which 
      matches any file with group write permission. See the EXAMPLES 
      section for some illustrative examples. 

    -perm -mode 
      All of the permission bits mode are set for the file. Symbolic 
      modes are accepted in this form, and this is usually the way in 
      which would want to use them. You must specify `u', `g' or `o' 
      if you use a symbolic mode. See the EXAMPLES section for some 
      illustrative examples. 

    -perm /mode 
      Any of the permission bits mode are set for the file. Symbolic 
      modes are accepted in this form. You must specify `u', `g' or 
      `o' if you use a symbolic mode. See the EXAMPLES section for 
      some illustrative examples. If no permission bits in mode are 
      set, this test matches any file (the idea here is to be consis‐ 
      tent with the behaviour of -perm -000). 

だからあなたのために働くことができるものです:あなたはファイル名のみが必要な場合

find . -perm -755 -printf '%m %p\n' 

ちょうど -printf一部を除去。

関連する問題