我有以下代码:
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发布于 2022-01-26 21:12:36
如果您想要运行输出合并成一行的两个命令,则需要使用-exec来执行运行这两个命令的单个shell。
find . -exec sh -c \
'for f; do stat --format="%n,%x,%y,%z,$(du -k "$f")" "$f"; done' \
_ {} +一些解释说明:
-c时,使用shell命令后面的第一个参数来设置$0。我通常使用虚拟值_,当我不关心设置了什么时,invocation.du -k "$f"会将尽可能多的匹配传递给正在运行的命令。-c参数中的-c参数中的循环--首先运行find传递给shell的文件,以构造在调用stat ... "$f"时使用的格式字符串。(我假设du的参数将是一个文件,而不是一个目录,否则您将得到一个结果列表,这些结果不能很好地与您要构建的行相匹配)。发布于 2022-01-26 20:27:51
此版本适用于我的计算机:
find . -exec stat --printf='%n,%x,%y,%z,' {} \; -exec du -k {} \; 2>&1 | tee output_sasdata_file_info.txt使用--printf选项stat可以打印没有尾随换行符的行。
https://stackoverflow.com/questions/70868746
复制相似问题