使用 find -exec 时如何加入两个命令的输出?
How to join the output of two commands when using find -exec?
我有以下代码:
find . -exec stat --format='%n,%x,%y,%z,' \; 2>&1 | tee output_sasdata_file_info.txt
我希望 du -k
命令在 %z,
之后立即执行并保存到 txt
尝试这样做,但它只是 运行 du -k
命令并忽略了 stat
find . -exec stat --format='%n,%x,%y,%z' find . -exec du -k,; \; 2>&1 | tee output_sasdata_file_info.txt
所需输出示例:
./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
这个版本适用于我的电脑:
find . -exec stat --printf='%n,%x,%y,%z,' {} \; -exec du -k {} \; 2>&1 | tee output_sasdata_file_info.txt
使用 stat
的 --printf
选项打印没有尾随换行符的行。
如果你想 运行 两个命令的输出合并成一行,你需要使用 -exec
来执行一个 shell 运行 两个命令。
find . -exec sh -c \
'for f; do stat --format="%n,%x,%y,%z,$(du -k "$f")" "$f"; done' \
_ {} +
一些解释说明:
- 当使用
-c
时,shell命令后的第一个参数用于设置[=13=]
。当我不关心 [=13=]
设置为什么时,我通常使用虚拟值 _
。
-exec ... {} +
会将尽可能多的匹配传递给 运行. 命令
-c
参数中的循环遍历在此调用中由 find
传递给 shell 的文件。
du -k "$f"
是运行首先构造调用stat ... "$f"
时要使用的格式字符串。 (我假设 du
的参数将是单个文件,而不是目录,否则您将获得一个结果列表,这些结果将无法很好地适合您要构建的行。)
我有以下代码:
find . -exec stat --format='%n,%x,%y,%z,' \; 2>&1 | tee output_sasdata_file_info.txt
我希望 du -k
命令在 %z,
尝试这样做,但它只是 运行 du -k
命令并忽略了 stat
find . -exec stat --format='%n,%x,%y,%z' find . -exec du -k,; \; 2>&1 | tee output_sasdata_file_info.txt
所需输出示例:
./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
这个版本适用于我的电脑:
find . -exec stat --printf='%n,%x,%y,%z,' {} \; -exec du -k {} \; 2>&1 | tee output_sasdata_file_info.txt
使用 stat
的 --printf
选项打印没有尾随换行符的行。
如果你想 运行 两个命令的输出合并成一行,你需要使用 -exec
来执行一个 shell 运行 两个命令。
find . -exec sh -c \
'for f; do stat --format="%n,%x,%y,%z,$(du -k "$f")" "$f"; done' \
_ {} +
一些解释说明:
- 当使用
-c
时,shell命令后的第一个参数用于设置[=13=]
。当我不关心[=13=]
设置为什么时,我通常使用虚拟值_
。 -exec ... {} +
会将尽可能多的匹配传递给 运行. 命令
-c
参数中的循环遍历在此调用中由find
传递给 shell 的文件。du -k "$f"
是运行首先构造调用stat ... "$f"
时要使用的格式字符串。 (我假设du
的参数将是单个文件,而不是目录,否则您将获得一个结果列表,这些结果将无法很好地适合您要构建的行。)