好的,所以我用谷歌搜索了一个小时或更长时间,但我仍然没有解决我的问题。
我有这3个bash命令:
find . -name "file_name" -exec du -h {} \;
- >给我文件的大小ls -l --time-style='+%d/%m/%Y' "file_name" | awk '{print $6}'
- >最后修改日期ls -l "file_name"|cut -d" " -f1
- >文件的权限我想使用system();
Output example :
文件大小:...
上次修改日期:...
文件权限:...
我的尝试:
char command[256];
char file_name[]={"myfile.txt"};
sprintf(command,"find . -name %s -exec du -h {} \; &&
ls -l --time-style='+%D/%m/%Y' %s | awk '{print $6}' &&
ls -l %s | cut -d' ' -f1",
file_name,file_name,file_name);
system((char*)command);
注意:我不必担心文件的路径,因为我正在使用同一目录中的文件执行我的程序。
编译错误:'Sh:&&不期望'
答案 0 :(得分:1)
您需要在命令中的每个百分号前添加百分号,否则sprintf会将其解释为打印掩码介绍人。此外,您需要在命令中的每个反斜杠前添加反斜杠,否则它将被sprintf解释为介绍人(例如\ n等)。另外,我修改了sprintf第二个参数(即字符串)...我在代码中的每个物理行的末尾添加了结尾引号,并在代码中的下一个物理行的开头。
这是一个可能正在寻找的示例(至少它编译并运行):
#include <stdio.h>
int main(int argc, char **argv)
{
char command[256];
char file_name[] = "myfile.txt";
sprintf(command, "find . -name %s -exec du -h {} \\; && "
"ls -l --time-style='+%%D/%%m/%%Y' %s | awk '{print $6}' && "
"ls -l %s | cut -d' ' -f1",
file_name,
file_name,
file_name);
printf("command: -->%s<--\n\n\n", command);
system((char*)command);
}