2013-08-12 55 views
-1

所以我需要調用多個蒼蠅的統計信息並將結果輸出到文本文件。我已經試過這在多個文件上調用統計信息 - Linux

stat 'Dir/$file_names' -c %n,%s,%y >> meta.txt 

$ FILE_NAME的格式爲:

"file1" "file2" "file3" 

但隨着行情的路徑剩餘統計時被調用它不工作。

有沒有辦法刪除它們或可能循環通過字符串?

還有些文件名有空格,所以我的報價可能會需要指定

文件名字符串設置使用以下命令將文件

file_name=`ssh [email protected] find /attachments -type f -mtime -100 -daystart -printf '\"%f\"\ ' ` 
+0

你的問題更多的是一個shell腳本問題,而不是涉及'stat'。因此請閱讀[高級bash腳本指南](http://www.tldp.org/LDP/abs/html/) –

+0

「'$ file_names」的意思是* \「file1 \」格式file2「」file3「'」?如何*精確*是'file_names' shell變量集? –

+0

這是一個使用find命令設置的字符串 – Jessica

回答

1

爲了要展開變量,使用雙引號:

 
stat "Dir/$file_names" -c %n,%s,%y >> meta.txt 

如果$file_names包含多個文件名,那麼你可以使用一個for循環,並在某種程度上牛逼格式化變量帽子使用分隔符。例如,你可以使用:分隔的文件名,所以不是:

"file1" "file2" "file3"

用這個代替:

file1:file2:file3

,然後設置IFS特殊變量(這就是所謂的「內部字段分隔符」和由外殼識別)到:並使用一個for循環:

 
IFS=":" 
for f in $file_names 
do 
    stat "Dir/$f" -c %n,%s,%y >> meta.txt 
done 

這也可以是一個班輪如果你只需要一個SINGL e命令:

 
IFS=":"; for f in $file_names; do stat "Dir/$f" -c %n,%s,%y >> meta.txt; done 

這將確保一切正常,即使你的文件名包含空格,如:

file1:file with spaces:even more spaces
+0

可能不會工作meta.txt ,因爲外殼將擴大的第一個參數'DIR/file1 file2 file3'但是OP要'Dir/file1 Dir/file2 Dir/file3' ... –

+0

@BasileStarynkevitch我的錯誤。我認爲它只包含一個文件名。 for循環解決了這個問題。 –

+0

如果file_names包含'a,b,c',那麼您可以使用'eval stat Dir/{$ {file_names}}'來處理它。 –

0

嘗試或許

for f in $file_names ; do 
    stat Dir/$f -c %n,%s,%y >> meta.txt 
done 

但是這可能不是做什麼你想要如果你想處理文件名與空格(我儘量避免)。

閱讀advanced bash scripting guide