參數列表太長並複製到 Samba 共享

參數列表太長並複製到 Samba 共享

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 有一個漂亮的圖形介面,並且還會告訴您儲存庫中是否存在衝突的變更 --- 所以這將是我的首選。

相關內容