2

ls -lがディレクトリにいて、次のように取得した場合:

-rwxr-x---  1 user1  admin        0  8 Aug  2012 file.txt
-rwxr-x---  1 user1  admin  1733480 26 Jul  2012 Archive.pax.gz
drwxr-x---@ 7 user1  admin      238 31 Jul  2012 Mac Shots
-rwxr-x---@ 1 user3  admin   598445 31 Jul  2012 Mac Shots.zip
-rwxr-x---@ 1 user1  admin      380  6 Jul  2012 an.sh
-rwxr-x---  1 user2  admin       14 30 Jun  2012 analystName.txt
-rwxr-x---  1 user1  admin       36  8 Aug  2012 apple.txt
drwxr-x---@ 7 user1  admin      238 31 Jul  2012 iPad Shots
-rwxr-x---@ 1 user1  admin  7372367 31 Jul  2012 iPad Shots.zip
-rwxr-x---  1 user2  admin      109 30 Jun  2012 test.txt
drwxr-x---  3 user1  admin      102 26 Jul  2012 usr

ただし、「Aug」で変更された「user1」が所有するファイルのみをリストしたい

-rwxr-x---  1 user1  admin        0  8 Aug  2012 file.txt
-rwxr-x---  1 user1  admin       36  8 Aug  2012 apple.txt

最良の方法は何ですか?

4

4 に答える 4

6

出力の解析lsは、決して良い信頼できるソリューションではありません。lsは、ファイル情報をインタラクティブに表示するためのツールです。その出力は人間向けにフォーマットされており、スクリプトにバグが発生します。代わりにグロブを使用するか、検索してください。理由を理解する:http://mywiki.wooledge.org/ParsingLs

代わりに、あなたは試すことができます:

find . -type f -user 'user1' -maxdepth 1

また

find . -type f -printf '%u %f\n' -maxdepth 1 # if you want to show the username

また

stat -c '%U %f' * | cut -d" " -f2-

見る

man find
man stat
于 2013-02-08T00:03:29.000 に答える
2

または、Michaelのgrepは、いつ変更されたかに関係なく、user1が所有する「AugustiPadShots」という名前のファイルも見つけるので、より明確にすることができます。

ls -l | awk '($3=="user1" && $7=="Aug")'
于 2013-02-08T00:01:53.337 に答える
1

私はそれを行うための最も安全な方法はこのようなものだと思います:

touch --date "2012-08-01" /tmp/start
touch --date "2012-09-01" /tmp/stop
find . -maxdepth 1 -type f -user user1 -newer /tmp/start -not -newer /tmp/stop -print0 | xargs -0 ls -l {}
rm /tmp/start /tmp/stop

またはワンライナーとして

touch --date "2012-08-01" /tmp/start; touch --date "2012-09-01" /tmp/stop; find . -maxdepth 1 -type f -user user1 -newer /tmp/start -not -newer /tmp/stop -print0 | xargs -0 ls -l {}; rm /tmp/start /tmp/stop

利点:

短所

  • 少し長いです

説明:

  • -maxdepth 1:結果を現在のディレクトリに制限します
  • -type f:結果をファイルに制限します
  • -user user1 :結果をuser1に属するファイルに復元します
  • -newer / tmp / start:結果を希望の日付で作成されたより新しいファイルに再ストリングします/tmp/start
  • -not -newer / tmp / stop:結果を、目的の日付で作成された、より新しいファイルに再ストリング化します。/tmp/stop
  • -print0:名前に改行が含まれるファイル名を処理できるようにします。
于 2013-02-08T00:17:24.863 に答える
0

どうls -l | grep user1 | grep Augですか?

または、正規表現を組み合わせることができます。ls -l | grep 'user1.*Aug'

于 2013-02-07T23:59:01.727 に答える