如果我想列出文件根据文件名中包含“foo”的日期,我可以执行以下任一操作
find . -name "*foo*" -exec ls -lrt {} \;
ls -lrt $(find . -name "*foo*")
如果我想列出文件根据文件本身包含“foo”的日期,我只能这样做
ls -lrt $(grep -rl "foo")
另外,grep -l
返回文件列表,例如
file1
file2
file3
,列表的颜色将与默认颜色不同。
Wherasfind
返回一个列表,采用默认颜色,如下所示
./file1
./file2
./file3
那么这里发生了什么? 这两个结果有什么区别? 为什么我无法执行 grep 的结果?
答案1
您提出的前两个命令并不等效。如果您使用find
,-exec ls
则将为每个文件find
运行ls
一次。输出顺序将是 找到的顺序find
,而不是ls
。由于ls
一次只运行一个文件,因此它不知道如何排列列。例如,在 Cygwin bash 中完成:
Nicole@NicoleDesktop ~/HamiltonCshell/Current/util
$ find . -name "s*.c" -exec ls -lrt {} \;
-rwx------+ 1 Nicole None 104826 Dec 29 2010 ./Archive/su.2010-12-29/su.c
-rwx------+ 1 Nicole None 107074 Aug 2 2011 ./Archive/su.2011-08-29/su.c
-rwx------+ 1 Nicole None 125359 Jul 17 11:47 ./sed.c
-rwx------+ 1 Nicole None 15517 Oct 6 2011 ./setrows.c
-rwx------+ 1 Nicole None 8454 Oct 8 2011 ./setwin.c
-rwx------+ 1 Nicole None 39007 Jan 24 2012 ./shortcut.c
-rwx------+ 1 Nicole None 4655 May 22 2009 ./showdesk.c
-rwx------+ 1 Nicole None 66906 Nov 20 09:58 ./sort.c
-rwx------+ 1 Nicole None 9702 May 22 2009 ./split.c
-rwx------+ 1 Nicole None 21306 May 22 2009 ./strings.c
-rwx------+ 1 Nicole None 113680 Jul 15 06:56 ./su.c
-rwx------+ 1 Nicole None 10076 May 23 2009 ./sum.c
如果您使用命令替换,shell 会将生成的列表粘贴find
回命令行作为参数ls
,然后它将ls
在整个文件列表上运行一次,并且结果确实会按日期排序,最新的排在第一位。
Nicole@NicoleDesktop ~/HamiltonCshell/Current/util
$ ls -lt $(find . -name "s*.c")
-rwx------+ 1 Nicole None 66906 Nov 20 09:58 ./sort.c
-rwx------+ 1 Nicole None 125359 Jul 17 11:47 ./sed.c
-rwx------+ 1 Nicole None 113680 Jul 15 06:56 ./su.c
-rwx------+ 1 Nicole None 39007 Jan 24 2012 ./shortcut.c
-rwx------+ 1 Nicole None 8454 Oct 8 2011 ./setwin.c
-rwx------+ 1 Nicole None 15517 Oct 6 2011 ./setrows.c
-rwx------+ 1 Nicole None 107074 Aug 2 2011 ./Archive/su.2011-08-29/su.c
-rwx------+ 1 Nicole None 104826 Dec 29 2010 ./Archive/su.2010-12-29/su.c
-rwx------+ 1 Nicole None 10076 May 23 2009 ./sum.c
-rwx------+ 1 Nicole None 21306 May 22 2009 ./strings.c
-rwx------+ 1 Nicole None 9702 May 22 2009 ./split.c
-rwx------+ 1 Nicole None 4655 May 22 2009 ./showdesk.c