2015-08-18 22 views
0

我有一條線,將產生的md5sum到從文件的文件包括:發現:輸出到文件與評論

find/-type f \(-name "*.pl" -o -name "*.py" \) | md5sum *.pl *.py >> sum.txt 

sum.txt將輸出:

d41d8cd98f00b204e9800998ecf8427e file.pl 
60b725f10c9c85c70d97880dfe8191b3 file.py 

我需要在文件名後包括服務器名稱,最好是讀$ HOSTNAME,因爲腳本將運行在不同的服務器上,如:

d41d8cd98f00b204e9800998ecf8427e file.pl host.one.com 
60b725f10c9c85c70d97880dfe8191b3 file.py host.one.com 
+2

該命令沒有做你的期望。或者更具體地說,'find'部分是無用的。您正在丟棄其輸出,並且'md5sum'正在當前目錄中的* .pl和* .py'文件中運行。如果你想在'find'的輸出上運行,你需要在'find'命令的輸出中使用'xargs'或'-exec'或類似的命令實際運行'md5sum'。 –

+0

至於實際的問題,使用'sed'或'awk'或類似的方法來後處理輸出文件。 –

+0

它實際上正在做我需要它做的事情。我嘗試過使用awk,但似乎找不到解決方案。 – nicoX

回答

1

該命令將搜索所有*.pl*.py文件。 find將執行命令md5sum命令和一個主機名將被添加到每一行。這兩個命令都將產生相同的輸出:

find/-type f \(-name "*.pl" -o -name "*.py" \) -exec md5sum {} + | awk -v ORS=" $HOSTNAME\n" 1. >> sum.txt 

find/-type f -name "*.p[ly]" -exec md5sum {} + |awk -v "h=$HOSTNAME" '{print $0,h}' >> sum.txt 
+0

請考慮編輯您的帖子,以添加更多關於您的代碼的解釋以及爲什麼它可以解決問題。一個主要包含代碼的答案(即使它正在工作)通常不會幫助OP瞭解他們的問題。 – SuperBiasedMan

+0

第二種解決方案 - 在這種情況下,搜索pl和py文件時''* .p [ly]「'很好。再加上一個!對於更通用的解決方案,您可以像我所示的那樣使用'-regex'。 – hek2mgl

1

另一種方法是使用查找的-regex和使用sed爲附加的主機名:

find/-type f -regex '.*\.\(py\|pl\)' -exec md5sum {} + | sed 's/$/ '"$HOSTNAME'/'