grep ls跨标签输出

cho*_*hop 2 bash ls

如果我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
Run Code Online (Sandbox Code Playgroud)

但是只想列出"user1"所拥有的文件,这些文件在"Aug"中被修改得到

-rwxr-x---  1 user1  admin        0  8 Aug  2012 file.txt
-rwxr-x---  1 user1  admin       36  8 Aug  2012 apple.txt
Run Code Online (Sandbox Code Playgroud)

什么是最好的方法?

Gil*_*not 6

解析ls输出永远不是一个好的和可靠的解决方案.ls是一种交互式查看文件信息的工具.它的输出格式化为人类,并将导致脚本中的错误.使用globs或代替.了解原因:http://mywiki.wooledge.org/ParsingLs

相反,你可以尝试:

find . -type f -user 'user1' -maxdepth 1
Run Code Online (Sandbox Code Playgroud)

要么

find . -type f -printf '%u %f\n' -maxdepth 1 # if you want to show the username
Run Code Online (Sandbox Code Playgroud)

要么

stat -c '%U %f' * | cut -d" " -f2-
Run Code Online (Sandbox Code Playgroud)

看到

man find
man stat
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案.解析`ls'太容易出错了.另一方面,像`find`和`stat`这样的工具就是为这类任务而设计的. (2认同)
  • GNU find有一个`-printf`提供类似于stat的输出,所以你也可以组合这两个命令. (2认同)