Linux Bash:按時間戳移動/複製檔案/目錄

Linux Bash:按時間戳移動/複製檔案/目錄

這是我正在使用的命令:

find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;

我正在嘗試將許多目錄從一個目錄複製到另一個目錄,但僅限於過去 2 小時內建立的目錄。

但我的命令不起作用,我真的不明白為什麼,如果不是很明顯的話,我不是一個非常有經驗的 Linux 用戶。從我得到的資訊來看,cp似乎將我的預期目的地解釋為來源。

我什至嘗試過使用xargs,但我了解的更少。

在 Debian Squeezy 中使用 Bash 並在 root 中執行指令。

答案1

從我得到的資訊來看,cp似乎將我的預期目的地解釋為來源。

是的。這是因為一般的 Linux/Unix 語法是這樣的:

[some command] [some command options] [source item] [destination item]

所以看看你的指令:

find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;

cp -f absolute-destination {}是倒退的,因為{}代表透過命令找到的來源文件find,而「絕對目標」正是它的本質;一個目的地。因此該命令的該部分應該重寫為cp -f {} absolute-destination.

另外:

  • -name "*"無論如何,如果您要根據時間搜尋所有文件,則這是多餘的;這意味著你可以放棄它。
  • 另外,使用amin有點令人困惑,因為-amin -120它的意思是“該文件已被訪問過在最後120分鐘內。如果您想採取行動創建文件時間,yhat 應更改為cmin— 又名:n幾分鐘前更改 — 相反; Linux 中的更多詳細信息find手冊頁。

所以最終的命令是:

find absolute-path -cmin -120 -exec cp -f {} absolute-destination \;

但在運行該cp命令之前,您應該始終進行“試運行”,以echo查看到底發生了什麼,如下所示:

find absolute-path -cmin -120 -exec echo {} \;

請記住,對這樣的命令進行測試“空運行”從長遠來看,運行實際/最終命令將為您省去麻煩。特別是如果您計劃將命令運行為root.

你永遠不知道你是否在命令邏輯中犯了一個簡單的、無意的錯誤,並可能以意想不到的方式搞砸。在不進行測試的情況下將結構錯誤的命令匆忙投入“生產”可能會在開始時為您節省幾分鐘的時間,但隨後可能會導致數小時(在某些情況下甚至是數天)的清理工作。總是在命令列中工作時請注意安全。

相關內容