首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用find -exec时加入两个命令的输出?

如何在使用find -exec时加入两个命令的输出?
EN

Stack Overflow用户
提问于 2022-01-26 18:47:16
回答 2查看 50关注 0票数 1

我有以下代码:

代码语言:javascript
复制
find . -exec stat --format='%n,%x,%y,%z,' \; 2>&1 | tee output_sasdata_file_info.txt

我希望执行du -k命令并将其保存到%z,之后的txt

尝试这样做,但它只是运行du -k命令而忽略stat

代码语言:javascript
复制
find . -exec stat --format='%n,%x,%y,%z' find . -exec du -k,; \; 2>&1 | tee output_sasdata_file_info.txt

期望输出的示例:

代码语言:javascript
复制
./sas/anual.sas7bdat.gz,2020-03-04 11:21:59.648155603 -0300,2020-03-04 11:21:59.845155836 -0300,2021-02-01 16:40:26.542568391 -0350,2656546
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-26 21:12:36

如果您想要运行输出合并成一行的两个命令,则需要使用-exec来执行运行这两个命令的单个shell。

代码语言:javascript
复制
find . -exec sh -c \
  'for f; do stat --format="%n,%x,%y,%z,$(du -k "$f")" "$f"; done' \
  _ {} +

一些解释说明:

  1. 在使用-c时,使用shell命令后面的第一个参数来设置$0。我通常使用虚拟值_,当我不关心设置了什么时,invocation.
  2. du -k "$f"会将尽可能多的匹配传递给正在运行的命令。-c参数中的
  3. ---c参数中的循环--首先运行find传递给shell的文件,以构造在调用stat ... "$f"时使用的格式字符串。(我假设du的参数将是一个文件,而不是一个目录,否则您将得到一个结果列表,这些结果不能很好地与您要构建的行相匹配)。
票数 0
EN

Stack Overflow用户

发布于 2022-01-26 20:27:51

此版本适用于我的计算机:

代码语言:javascript
复制
find . -exec stat --printf='%n,%x,%y,%z,' {} \; -exec du -k {} \; 2>&1 | tee output_sasdata_file_info.txt

使用--printf选项stat可以打印没有尾随换行符的行。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70868746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档