如果我在目录中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
但是只想列出“user1”所拥有的文件,这些文件在“Aug”中被修改以获得
-rwxr-x--- 1 user1 admin 0 8 Aug 2012 file.txt
-rwxr-x--- 1 user1 admin 36 8 Aug 2012 apple.txt
最好的方法是什么?
答案 0 :(得分:6)
解析ls
输出永远不是一个好的和可靠的解决方案。 ls
是用于交互式查看文件信息的工具。它的输出格式化为人类,并将导致脚本中的错误。使用globs或代替。了解原因: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
答案 1 :(得分:2)
或者你可以更明确,因为Michael的grep也会发现user1拥有的文件名为'August iPad Shots',无论它何时被修改:
ls -l | awk '($3=="user1" && $7=="Aug")'
答案 2 :(得分: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
或作为 one liner
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
优点:
缺点
说明:
/tmp/start
/tmp/stop
答案 3 :(得分:0)
ls -l | grep user1 | grep Aug
怎么样?
或者你可以结合正则表达式:ls -l | grep 'user1.*Aug'