如何正确地从ls -al grep文件名

mat*_*cks 5 unix grep ls

如果当我通过ls管道时"文件名"匹配时,如何告诉grep只打印出行?我想让它忽略每一行上的所有内容,直到时间戳之后.必须有一些简单的方法可以在一个命令上执行此操作.

正如你所看到的,没有它,如果我搜索文件"rwx",它不仅会返回rwx.c行,还会返回前三行因为权限.我打算使用AWK,但如果我搜索"rwx",我希望它显示整个最后一行.

有任何想法吗?

编辑:谢谢你下面的黑客攻击.但是,拥有更多无错误的方法会很棒.例如,如果我有一个名为"rob rob"的文件,我将无法使用所述解决方案.

drwxrwxr-x 2 rob rob  4096 2012-03-04 18:03 .
drwxrwxr-x 4 rob rob  4096 2012-03-04 12:38 ..
-rwxrwxr-x 1 rob rob 13783 2012-03-04 18:03 a.out
-rw-rw-r-- 1 rob rob  4294 2012-03-04 18:02 function1.c
-rw-rw-r-- 1 rob rob   273 2012-03-04 12:54 function1.c~
-rw-rw-r-- 1 rob rob    16 2012-03-04 18:02 rwx.c
-rw-rw-r-- 1 rob rob    16 2012-03-04 18:02 rob rob
Run Code Online (Sandbox Code Playgroud)

小智 12

以下将仅列出文件名,每行中包含一个文件.

$ ls -1     
Run Code Online (Sandbox Code Playgroud)

包括 .档

$ ls -1a 
Run Code Online (Sandbox Code Playgroud)

请注意,参数是数字"1",而不是字母"l".


mat*_*fee 3

为什么不使用 grep 并匹配时间戳后面的文件名?

grep -P "[0-9]{2}:[0-9]{2} $FILENAME(\.[a-zA-Z0-9]+)?$"
Run Code Online (Sandbox Code Playgroud)

[0-9]{2}:[0-9]{2}时间, 是$FILENAME您放置rob rob或 的位置rwx,尾随(\.[a-zA-Z0-9]+)?是为了允许可选扩展。

编辑:@JonathanLeffler 下面指出,当文件超过大约 6 个月时,时间列会被替换为一年 - 无论如何,这就是我的计算机上发生的情况。您可以([0-9]{2}:[0-9]{2}|(19|20)[0-9]{2})留出时间或年份,但最好使用 awk (?)。

[foo@bar ~/tmp]$ls -al
total 8
drwxrwxr-x  2 foo foo 4096 Mar  5 09:30 .
drwxr-xr-- 83 foo foo 4096 Mar  5 09:30 ..
-rw-rw-r--  1 foo foo    0 Mar  5 09:30 foo foo
-rw-rw-r--  1 foo foo    0 Mar  5 09:29 rwx.c
-rw-rw-r--  1 foo foo    0 Mar  5 09:29 tmp

[foo@bar ~/tmp]$export filename='foo foo'

[foo@bar ~/tmp]$echo $filename
foo foo

[foo@bar ~/tmp]$ls -al | grep -P "[0-9]{2}:[0-9]{2} $filename(\.[a-zA-Z0-9]+)?$"
-rw-rw-r--  1 cha66i cha66i    0 Mar  5 09:30 foo foo
Run Code Online (Sandbox Code Playgroud)

(如果您愿意,您还可以扩展到匹配整行:

^                              # start of line
[d-]([r-][w-][x-]){3} +        # permissions & space (note: is there a 't' or 's'
                               # sometimes where the 'd' can be??)
[0-9]+                         # whatever that number is
[\w-]+ [\w-]+ +                # user/group (are spaces allowed in these?)
[0-9]+ +                       # file size (modify for -h switch??)
(19|20)[0-9]{2}-               # yyyy (modify if you want to allow <1900)
(1[012]|0[1-9])-               # mm
(0[1-9]|[12][0-9]|3[012]) +    # dd
([01][0-9]|2[0-3]):[0-6][0-9] +# HH:MM (24hr)
$filename(\.[a-zA-Z0-9]+)?     # filename & optional extension
$                              # end of line
Run Code Online (Sandbox Code Playgroud)

。你明白了,根据你的需求定制。)

  • 当心旧文件 - 当文件早于大约 6 个月时,“ls -l”列表中的时间格式会丢失时间并增加年份。 (2认同)