2014-04-01 67 views
0

每次我遞歸複製我總是以httpdocs文件夾而不是public_html中的文件結束。Linux複製遞歸

比如我可能會遇到這樣的:

cp -rpf /var/www/vhosts/website/httpdocs /var/www/vhosts/anotherwebsite/httpdocs 

我總是在/ var/WWW /虛擬主機/ anotherwebsite/httpdocs資料/ httpdocs資料時,所有我試圖做的是從一個用戶移動網站結束到另一個。

+0

目標文件夾已經存在嗎? – Thilo

+0

'cp -rpf/var/www/vhosts/website/httpdocs/var/www/vhosts/anotherwebsite /' – devnull

+0

是的,它總是存在的,因爲我通常更新一個網站。 –

回答

0

當您只是想「推」您的本地網站而沒有長時間離線時,您可以使用臨時目錄。

TODAY=$(date +%y%m%d) 
NEWCODE=/var/www/vhosts/anotherwebsite/docs_${TODAY} 
OLDCODE=/var/www/vhosts/anotherwebsite/docs_old 
rm -rf ${NEWCODE} 
cp -rpf /var/www/vhosts/website/httpdocs ${NEWCODE} || exit 1 
# some checks ? 
cd /var/www/vhosts/anotherwebsite/ || exit 1 
mv httpdocs ${OLDCODE} || exit 1 
mv ${NEWCODE} httpdocs 

之間的動作,你將無法使用。當這是一個問題時,您可能需要創建一個work_in_progress.html文件,將該文件重命名爲httpdocs/index.html,刪除所有其他文件並在此後複製新文件(正確的index.html文件作爲最後一個文件) 。 但是,這似乎喜歡,堅持在上面的解決方案中短小的木桶。

+0

嘿,Walter,我不希望這樣做,我通常會將整個網站複製到另一個域我們有和在那裏工作(在同一臺Linux服務器上),所以我只想複製文件。我總是以httpdocs/httpdocs問題結束。爲什麼沒有人理解我的問題,這是我一直在犯的一個簡單錯誤,我確信它只需要添加一個。或者*我的cp命令,我想我已經完成了。我還記得一個開發者警告我有關某事的事情。或*過去。 –

+0

有點像cp -rpf/var/www/vhosts/website/httpdocs/*/var/www/vhosts/anotherwebsite/httpdocs 你也可以看看rsync。 –

0

您需要告訴copy將目標目錄視爲文件而不是目錄(將您列爲源的文件夾複製到該目錄中)。這意味着您需要-T選項。

或者,如果該glob捕獲您實際關心的所有文件,則可以使用/var/www/vhosts/website/httpdocs/*的來源。這也應該起作用。

+0

我認爲我的命令應該是這樣的:\ cp -rpf/var/www/vhosts/newsite/httpdocs/*/var/www/vhosts/livewebsite/httpdocs但是我已經被警告使用通配符可能會導致問題。它甚至可以是\ cp -rpf /var/www/vhosts/newsite/httpdocs/.*或。到/ var/www/vhosts/livewebsite/httpdocs我只是不想以/ var/www/vhosts/livewebsite/httpdocs/httpdocs結束我只想將/ newsite/httpdocs中的文件放入/ livewebsite/httpdocs用相同的名稱覆蓋任何文件等。我知道如何手動mv的東西。 .. ..等,但它不是我滿意的解決方案。 –

+0

我剛剛編輯我的帖子,以包括我想包括在首位的glob。我不確定那裏發生了什麼。使用通配符不能「導致問題」,但它確實具有您需要考慮的特定操作規則(例如,它不會匹配「.dotfiles」)。然而,'c'的'-T'選項更符合你想要的'cp'。 –

0

Wat你想要一個文件存在於aontherwebsite而不是源網站嗎? 我想你想另一個網站是一個確切的副本,所以要確保先刪除舊文件。

rm -r /var/www/vhosts/anotherwebsite/httpdoc 
cp -rpf /var/www/vhosts/website/httpdocs /var/www/vhosts/anotherwebsite/httpdoc 

編輯:anotherwebsite應該保持可用。 一般的訣竅是用tar:

tar cf - * | (cd /target; tar xf -) 

你的情況:

TARGET=/var/www/vhosts/anotherwebsite/httpdoc 
cd /var/www/vhosts/website/httpdocs || exit 1 
mkdir -p ${TARGET} 
[ -d ${TARGET} ] || exit 1 
tar cf - * | (cd ${TARGET}; tar xf -) 

我補充說: 「|| 1號出口」,以確保你不會從錯誤的目錄複製和$ {TARGET}是一個dir。 你仍然有3個挑戰: 1)你如何刪除你不再使用的文件(yesterday_special_action.html) 2)你應該先複製圖像,爲客戶在複製圖像之前打開新頁面 3)什麼網站做什麼複製零件(磁盤已滿)後,如果複製/焦點失敗

我將發佈解決這些挑戰的新答案。

+0

我不希望先在實時網站上刪除舊文件,因爲在將新文件複製到實時網站的網頁根目錄時,網站會短時間關閉。我只想創建新文件並覆蓋所有文件,我遇到的問題通常是在實際根目錄(httpdocs)內的一個名爲httpdocs的文件夾,因此當它應該複製內容時它看起來像httpdocs/httpdocs的httpdocs,並將它們覆蓋到只有httpdocs的實時網站中,而不是複製文件夾httpdocs並將其放置在httpdocs中,並以httpdocs/httpdocs結尾 –