Ubuntu 12.04 LTS 64 位元。
我正在嘗試將計劃任務從包含數千個檔案的目錄複製到 samba 共用(同時跳過重複)。我透過 GUI 映射了我的 Samba 共享。
我嘗試過的命令:
cp /home/security/Brick/* ~/.gvfs/"atm-bak-01.local/Brick 上的相機" -n
我發現了這個,但我不知道如何將語法更改為我需要的。
find -maxdepth 1 -name '*.prj' -exec mv -t ../prjshp {} +
非常感謝任何提示。
答案1
問題是 shell/home/security/Brick/*
使用很長(太長)的文件列表來擴展您的文件前將其傳遞給cp
.
如果您想複製所有Brick
目錄,也許最簡單的方法是:
cp -rn /home/security/Brick ~/.gvfs/"cam on atm-bak-01.local"/
使用「遞歸」標誌來cp
.這也將複製 Brick 下的所有結構(包括子目錄)。
一種可能性是使用for
循環:
for file in /home/security/Brick/*;
do
cp -n $file ~/.gvfs/"cam on atm-bak-01.local/Brick"
done
或使用查找:
find /home/security/Brick/ -type f -exec cp -n {} ~/.gvfs/"cam on atm-bak-01.local/Brick" \;
在此命令中,-type f
表示僅選擇檔案(無目錄),然後對每個檔案執行指定的命令:{}
被檔案名稱替換,並且\;
是關閉子句所需的分號-exec
,轉義,否則shell 將解釋它(並刪除)。
之後的命令-exec
可以是您想要的任何命令(例如,cp -n
您可以使用cp -av
在存檔模式下複製(包括時間戳和適當性)並覆蓋,或者您可以使用其他命令(但:你之前應該了解 shell 轉義、通配和引用,否則你可能會造成很多傷害 --- 請參閱範例“學習外殼”)。
find 是一個非常強大的指令-值得好好學習。我發現了有趣的教程這裡,這裡和這裡。
關於使用以下指令進行備份cp -n
:
請注意,該-n
標誌不會覆蓋現有文件,因此如果您對先前複製的本機目錄中的文件進行更改,它將不是再次複製...您將在備份中擁有它的舊版本。
因此,我建議使用備份或同步實用程序,例如齊奏或者同步,來做這項工作。這些實用程式只會更新更改的文件,可以最大限度地減少寫入(以及網路頻寬),並且通常更安全。您的備份可以rsync
透過簡單地說:
rsync -azvv /home/security/Brick ~/.gvfs/"cam on atm-bak-01.local/Brick"
(注意不要在末尾添加最後的“/”——否則 rsync 將創建一個子目錄 Brick/Brick。是的,rsync
功能強大,但有時卻很不穩定。)
Unison 有一個漂亮的圖形介面,並且還會告訴您儲存庫中是否存在衝突的變更 --- 所以這將是我的首選。