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