2014-11-22 72 views
1

好吧,我是Ubuntu的新手。我有20萬個文件需要經過並存檔30天內未更新的文件。複製並刪除

find . -type f -mtime +30 

完成。

然後我需要將它們複製到一個位置,同時保持它們的dir結構超過當前./這是因爲文件結構是每個文件唯一性的一部分。我可能有200個文件稱爲和然而FunRun/Sum和Smoke/Sum是兩個不同的東西。

find . -type f -mtime +30 -exec cp --parents '{}' /home/me/backup \; 

完成。但是這並不會刪除它們......嗯,mv是帶有刪除的cp。但MV沒有 - 父母切換。

所以,我想

find . -type f -mtime +30 -exec cp --parents '{}' /home/me/backup \; && rm 
for file in 'find . -type f -mtime +30' do sudo cp $file --parents '{}' /home/me/backup \; && sudo rm $file; done 

沒有去。所以我正在創建一個文件列表並使用它像舊學校批處理文件。問題是該列表需要很長時間才能完成,我希望將此過程自動化。所以我搜索並測試了沒有工作。所以無論是單行的bash腳本都是一個失敗的原因,需要編寫一個python腳本來完成它,或者你們可以提供幫助。所以我想我會在這裏問一下,看看週末過得如何,並在週一進行測試。

感謝您的幫助。

+0

那是最後的 「所以,我想」 兩個獨立的命令?在第一個問題中,你在哪裏期待「rm」的參數來自哪裏?你爲什麼在第二個中添加'sudo'? 「for」中的';'或換行符在哪裏?你希望'{}'從第二行開始,你爲什麼在你已經有'$ file'時想要什麼? (另外,爲什麼不在任何地方引用?) – abarnert 2014-11-22 01:07:46

+0

是的,它是兩個單獨的命令。 我添加了sudo,因爲當我嘗試複製它時,我得到您需要根級訪問錯誤。至於其他我試圖學習,並試圖讓它在我的測試服務器上工作。 – user1519219 2014-11-26 17:40:44

回答

1

大部分你正在做的事情看起來像霰彈槍調試嘗試 - 只是改變隨機的東西,卻不知道它們的意思。你應該仔細閱讀關於find的教程,也許應該閱讀關於bash腳本的教程。


無論如何,你可以串起來在單個find命令多個動作。即使多個-exec行動,如果你想。所以:

find . -type f -mtime +30 -exec cp --parents '{}' /home/me/backup \; -exec rm '{}' \; 

或者更簡單地說:

find . -type f -mtime +30 -exec cp --parents '{}' /home/me/backup \; -delete 

或者,當然,你可以寫,與它的所有參數調用cp --parents自己兩行shell腳本,然後用所有調用rm但它的最後一個論點,只是-exec那。


如果你想要做的for循環,你可以做到這一點......雖然xargs很可能會令感官比一個做他們一個,讓我們來試試你的方式:

  • 你根本不打電話給find;單引號標記文字字符串。如果你想執行一個字符串作爲命令並得到結果,你需要反引號。或者,更好的,$(…)
  • 單線程for循環在do之前需要分號。
  • 你已經添加了sudo,這不在你的find命令中,所以我懷疑你也想在這裏。
  • 使用$file沒有引號是一個壞主意,如果你有任何名稱中有空格的文件。
  • '{}'\;將通過字面{};字符串到cp。因此,您要求它將$file,{}/home/me/backup複製到;。這沒有任何意義。 find命令對這些東西有特殊用途,但cp不適用。如果您使用'{}'來嘗試傳遞文件名,則您已在$file中執行此操作。

所以:

for file in $(find . -type f -mtime +30); do cp "$file" --parents /home/me/backup && sudo rm "$file"; done 
+0

是的,我是Ubuntu和bash的新手。我在Windows上有10年,在Ubuntu上有2天左右。我確實閱讀過一些教程,這是我如何做到的。你推薦任何真正好的bash腳本教程嗎?當你剛剛學習時,永遠不知道什麼是好的或壞的。 今天我會試試這些,讓你知道。 =)感謝你的時間到目前爲止。 – user1519219 2014-11-26 17:39:15

+0

@ user1519219:不知道;我從sh/ksh用戶的教程中學到了bash。我不認爲這是一個很好的;幾十年後,即使bash有更好的解決方案,我仍然經常以笨重的ksh方式做事。 :)如果谷歌不夠好,也許嘗試在Unix/Linux/Ubuntu郵件列表或論壇上提問? – abarnert 2014-11-26 19:49:03

+0

我跑你的第一個腳本。我不得不將sudo添加到cp並刪除,但它在我的開發盒上工作。我將在今天晚些時候對它進行測試。謝謝有沒有辦法保留複製文件的修改日期? – user1519219 2014-11-26 21:43:56