2012-04-18 28 views
0
#!/bin/bash 
# create a list of checksums 
cat /dev/null > MD5SUM 
for i in */*/*.sql ; do test -e $i && md5sum $i >>MD5SUM ; done 

然後,此命令用來檢查是否有任何改變了shell腳本:有人可以幫忙解釋這段代碼嗎?這是創建一個校驗和列表

md5sum -c MD5SUM 

它工作正常,應有盡有。我只是不太明白如何。說如果我想在我的主目錄中創建所有文件的校驗和列表$HOME我該怎麼做? for循環的*/*/*.sql部分是什麼意思?我假設只顯示SQL文件,但我該如何修改?說我想要目錄中的所有文件?爲什麼它不只是*.sql?在這種情況下for循環的其餘部分做了什麼?

+0

你能接受我的答案嗎? – Mac 2016-11-19 23:24:19

回答

4

讓我們首先去的部分:

cat /dev/null > MD5SUM 

這隻會「擦除」這是之前創建的前一個文件MD5SUM /列表。

for i in */*/*.sql; 

這將從您當前的文件夾迭代2個目錄深處的文件。如果你有文件夾

~/a/b 
~/c/d 
~/e/f 

,並在您的個人文件夾(〜)所有的「* .SQL」裏面的目錄B,d,F將有校驗和計算運行你的腳本,並在目前的管道輸送到一個文件MD5SUM direcotry:

do test -e $i && md5sum $i >>MD5SUM ; done 

現在回答你的問題:

  1. 說,如果我想讓我的主目錄$ HOME的所有文件,我怎麼能做到這一點的校驗列表?

我會使用find命令使用exec選項

find $HOME -maxdepth 1 -name \*.sql -exec md5sum {} \; 
  1. 什麼的for循環/ /*.sql部分是什麼意思?

我回答了上面的問題,無論如何只有在進入文件之前深入了2個目錄。

  1. 我假設是顯示SQL文件只,但我怎麼能修改嗎?說我想要目錄中的所有文件?

變化

for i in */*/*.sql; 

for i in */*/*; 

或當前目錄

find $HOME -maxdepth 1 -name \* -exec md5sum {} \; 
  1. 爲什麼它不只是* .sql?在這種情況下for循環的其餘部分做了什麼?

之前解釋過。

希望它有幫助=)

+0

+1,很好的答案 – DCookie 2012-04-19 03:49:23

相關問題