小编Flo*_*oHe的帖子

管道作为 find 的 -exec 参数

是否可以使用管道命令作为 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>模式起作用?

command-line shell pipe find

5
推荐指数
1
解决办法
545
查看次数

find 的 mtime 和 ctime 选项

我刚刚在我的主目录中创建了一个文本文件 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

我的第二个问题是:

已更改文件的状态是否意味着:已更改文件内容和文件权限 & ...?

修改文件的数据是否意味着:更改文件内容?

find timestamps

5
推荐指数
1
解决办法
5947
查看次数

空字符串作为 while 循环中的命令:空/空命令

我想知道 while 循环如何评估其循环条件。在手册页中它写道:

而列表-1; 做列表-2;完毕

只要列表 list-1 中的最后一个命令返回退出状态为零,while 命令就会连续执行列表 list-2。

列表

列表是由运算符 ;、&、&& 或 || 之一分隔的一个或多个管道的序列,并且可选地以 ;、& 或 之一终止。

管道

管道是由一个控制运算符分隔的一个或多个命令的序列 | 或|&。管道的格式是:

         [time [-p]] [ ! ] command [ [|?|&] command2 ... ]
Run Code Online (Sandbox Code Playgroud)

这意味着:

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)

bash syntax

5
推荐指数
1
解决办法
2775
查看次数

标签 统计

find ×2

bash ×1

command-line ×1

pipe ×1

shell ×1

syntax ×1

timestamps ×1