2015-11-02 85 views
-2

好吧,我已經搜索了一個小時或更長時間,但仍然沒有解決我的問題。如何在system()中執行多個命令,同樣使用變量

我有這3的bash命令:

  1. find . -name "file_name" -exec du -h {} \; - >給我的文件的大小
  2. ls -l --time-style='+%d/%m/%Y' "file_name" | awk '{print $6}' - >最後modiffied日期
  3. ls -l "file_name"|cut -d" " -f1 - >文件的權限

我想要一次執行這3個命令使用system();

Output example : 

文件大小:...

最後modiffied日期:...

文件權限:...

我嘗試:

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); 

NOTES :我不必擔心文件路徑,因爲我使用的是我執行的同一個目錄中的文件我的C程序。

編譯錯誤:「噓:& &預計不會」

+0

這不回答你的問題,但可能你只需要使用'STAT()'反而是API? – keithmo

+2

如果要在格式字符串中包含文字'%',則需要使用其中的兩個'%%'。可能'%D /%m /%Y'正在引起你某種問題。如果你確切地指出了什麼是錯誤的,回答你的問題會容易得多。 – rici

+3

而且,是的,你應該使用'stat()'作爲@keithmo的建議,而不是你用system()建立的Rube Goldberg – rici

回答

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); 
} 
相關問題