最近幾周裡,我總是收到人們詢問一些快速零散的問題。有時候一個人是在尋找一個有幫助的建議,或者一個具體的指令,或者一個指令行捷徑,以完成一個特定的任務。本篇将介紹最近人們向我提出的三個問題,以及完成這些任務的簡單方法。
<a target="_blank"></a>
我們要找到那些在過去的一個月中被改動過的檔案,并将他們從目前的位置複制到另一個目錄中去。
在這種情況下,能否精确的解決取決于你複制檔案的時候是否保持了原來的檔案樹結構,還是你僅僅隻是把所有檔案全部複制到了一個指定的地方。如果我們隻是想把所有的檔案儲存到一個檔案夾中,或許這樣做是為了将這些檔案歸檔,那麼我們可以使用find這條指令。通過使用find指令,我們能夠根據檔案被修改的時間查找到他們的位置,然後複制他們到指定的地方。這條指令看起來是這樣:
find documents -mtime -30 -exec cp "{}" backup \;
上面這條指令會在documents檔案夾中查找在過去30天内被修改過的檔案。這些檔案之後将會被複制到另一個叫backup的目錄中去。find指令将會通過調用cp指令來執行複制這一操作。通過修改mtime這條參數,我們可以查找到最近某個時間内被修改過的檔案,在上面這個例子中它被設定為在過去的30天内。
更多的時候,我們會想要在把檔案複制到目标檔案夾後,仍然能夠保留源檔案夾的目錄結構。很多時候,人們都希望兩個檔案夾的内容同步,然後他們會運作一個腳本來使他們保持一緻。這種情況下,我們可能會用到rsync這條指令了。這個工具會把新檔案、修改過的檔案從一個複制到另一個目錄中去,同時保持源目錄的展示結構:
rsync -a documents/ backup
上面的例子,它會先找到哪些檔案在documents中和backup中都存在,以便不再複制這些不必要的檔案。
有一個我們都會做的很普遍的工作,就是在一個文本檔案中找到一個單詞,然後用另一個單詞把這個詞在文本中的所有執行個體都替換掉。
比如,假設我有一個文檔中提到一個人名叫“becky”,但是我後來決定還是用稍微正式點的稱呼“rebecca”為好。對檔案中的這個簡單的改動,下面這條指令會起到作用:
perl -pi -e 's/becky/rebecca/' mydocument.txt
這條微型的perl腳本會查詢文檔中所有“becky”的執行個體,并且将之改為“rebecca”。程式首先讀取名為mydocument.txt這個要改動的文檔,待修改完畢後再儲存回去。
一個普遍關注的問題是,在一個硬碟要給别人或者被扔掉之前,需要對其中存儲的敏感資料做些什麼。
有些人會在電腦裡儲存一些銀行的業務資料或者稅務資訊,那麼這些資料最好在你的硬碟被轉手到别人之前被徹底清理掉。現在有一些方法和工具可以讓你使用。我最喜歡的一個是shred這條指令,它不僅能對單一檔案進行處理,同樣也能對整個裝置進行處理。要重寫一個檔案裡面的内容,我們可以這樣運作shred:
shred mytaxes.odt
上面這個例子中,它會移除檔案裡存的内容,但并不會把檔案本身從硬碟中删除掉。如果要清除檔案的内容同時删除掉這個檔案,我們可以這樣運作:
shred -u mytaxes.odt
需要強調的一點是,shred并不是在所有的檔案系統中都能正常運作,尤其是那些帶有日志功能的比較新的檔案系統。在shred的操作手冊中寫明了哪些檔案系統運作這個程式的時候會出問題。當處理敏感資料的時候,最好的方法也許是清除掉整張硬碟。shred同樣也能辦到。下面這個例子中,顯示了如何移除掉我們電腦中第一塊硬碟内的所有資料。使用這條指令一定要非常小心:
shred /dev/sda
原文釋出時間為:2013-10-02
本文來自雲栖社群合作夥伴“linux中國”