是否可以使用管道命令作为 find-exec
选项的参数?这意味着,我想做这样的事情:
find . -name CMakeLists* -exec cat '{}' | grep lib \;
Run Code Online (Sandbox Code Playgroud)
我试图cat '{}' | grep lib
为每个文件执行的地方,但这不起作用。引用也不起作用。有人有建议吗?
更新:
特定的问题得到了回答。现在,有没有办法让通用find <path> -type f -name <name> -exec <pipeline-command>
模式起作用?
我刚刚在我的主目录中创建了一个文本文件 yyy。我修改它touch yyy
并手动编辑它。
然后我想通过以下方式找到这个文件(和其他文件):
find ~/ -type f -mtime 1 -ctime 1 | grep yyy
Run Code Online (Sandbox Code Playgroud)
但 yyy 不显示。在 find 的 man 中是这样写的:
-ctime n:文件的状态在 n*24 小时前最后一次更改。...
-mtime n:文件数据最后修改时间为 n*24 小时前。...
所以我的第一个问题是:
为什么找不到yyy
我的第二个问题是:
已更改文件的状态是否意味着:已更改文件内容和文件权限 & ...?
修改文件的数据是否意味着:更改文件内容?
我想知道 while 循环如何评估其循环条件。在手册页中它写道:
而列表-1; 做列表-2;完毕
只要列表 list-1 中的最后一个命令返回退出状态为零,while 命令就会连续执行列表 list-2。
和
列表
列表是由运算符 ;、&、&& 或 || 之一分隔的一个或多个管道的序列,并且可选地以 ;、& 或 之一终止。
和
管道
管道是由一个控制运算符分隔的一个或多个命令的序列 | 或|&。管道的格式是:
Run Code Online (Sandbox Code Playgroud)[time [-p]] [ ! ] command [ [|?|&] command2 ... ]
这意味着:
while <single-command>; do <list>; done;
Run Code Online (Sandbox Code Playgroud)
是有效的语法。只要<single-command>
返回,就会执行列表0
。如果我像这样运行 while 循环,我会收到(显然)错误:
$while aaa; do echo "foo"; done;
If 'aaa' is not a typo you can use command-not-found to lookup the package that contains it, like this:
cnf aaa
$while ; do echo …
Run Code Online (Sandbox Code Playgroud)