1

過去45日間にディレクトリ構造全体で編集した(そのファイルを編集した最後のユーザーであった)ファイルの数のユーザー名ごとのカウントを取得したいと思います。

これが私の希望する出力です:

+-------+-----+
| alex  |   3 |
| liza  | 345 |
| harry | 564 |
| sally |  23 |
+-------+-----+

これまでのところ、このPowerShellが機能しないスクリプトがあります。

gci -Recurse| where {$_.LastWriteTime -gt (Get-Date).AddDays(-45)}| group owner|select count,owner

解決策は、PowerShellまたはbashにすることができます!

ご指導ありがとうございます。

私の意見では、プロセスは次のようになります。

  1. 過去45日間に変更されたすべてのファイルのリストを取得します
  2. 最近ファイルを変更したすべてのユーザー名を取得します
  3. ユーザー名でグループ化する
4

4 に答える 4

2

パワーシェルの方法:

gci -Recurse| where {$_.LastWriteTime -gt (Get-Date).AddDays(-45)}| 
 select @{n="Owner";e={ get-acl $_ | select -expa owner }} | select -expa owner | group  | select Count,name

最後のコメントの編集 (powershell 3.0):

$dirs = dir -Directory

foreach ( $dir in $dirs)
{      
 $a = dir $dir -r -File  |  select @{n="Owner";e={ get-acl $_.fullname | 
 select -expa owner }} | select -expa owner | group  | select Count,name

 $a | add-member -Name Path -MemberType NoteProperty -Value $dir -PassThru
}

パワーシェル 2.0:

$dirs = dir | ? { $_.psiscontainer }
foreach ( $dir in $dirs)
{

 #$dir

 $a = dir $dir -r |? { -not $_.psiscontainer } |  select @{n="Owner";e={ get-acl $_.fullname | select -expa owner }} | select -expa owner | group  | select Count,name

 $a | add-member -Name Path -MemberType NoteProperty -Value $dir -PassThru
}
于 2013-02-01T20:17:26.507 に答える
1

PowerShell 3の使用:

ls -r | ? LastAccessTime -gt (get-date).AddDays(-45) | get-acl | group Owner -no

内訳:

  1. すべてのファイルを再帰的に検索
  2. 日付/時刻演算を使用して、45日未満のファイルのみを使用する
  3. セキュリティ記述子を取得する
  4. 所有者プロパティでグループ化し、要素を破棄します(カウントのみが必要です)
于 2013-02-21T07:28:13.243 に答える
1

ファイルシステムは、ファイルを最後に編集したユーザーの身元を追跡しませんが、ファイルの所有者を追跡します。所有者ごとに最近変更されたファイルの数を見たい場合は、これを試すことができます:

find . -not -mtime +45 -printf %u\\n | sort | uniq -c

これは、次のことを意味します。

  • 45 日以上前に変更されていないすべてのファイルを検索:

    find . -not -mtime +45
    
  • ファイルごとに、ファイルの所有者を出力します。

    -printf %u\\n
    
  • 結果をグループ化してカウントします。

    | sort | uniq -c
    
于 2013-02-01T19:37:07.710 に答える
0

here's a very basic script that could help you get there:

$ cat findfilesbyuser.sh
#!/usr/bin/bash

searchdir="$1"
filelist=`find "$searchdir" -maxdepth 1 -type f -printf "%u:%p\n"`
userlist=`echo "$filelist" | cut -d: -f1 | sort -u`

echo "username:filecount"

while read uname
 do
  userfilecount=`grep -c "^"$uname":" <<< "$filelist"`
  echo "$uname:$userfilecount"
 done <<< "$userlist"

here's how i call it, and its output:

$ ./findfilesbyuser.sh /cygdrive/h
username:filecount
Administrators:1
user01:13
user02:24

you will likely run into some problems with cygwin presenting some user names as ??????, but unfortunately, that's unavoidable if you're using the bash solution to scan files created on windows.

hth!

于 2013-02-01T20:10:35.097 に答える