Linux复制递归

时间:2014-04-01 10:51:33

标签: linux centos cp

每次我递归复制时,我总是以httpdocs文件夹而不是public_html中的文件结束。

例如,我可能会运行类似:

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

我总是最终使用/ var / www / vhosts / anotherwebsite / httpdocs / httpdocs,而我所要做的就是将网站从一个用户移动到另一个用户。

3 个答案:

答案 0 :(得分:0)

您需要告诉副本将目标目录视为文件而不是目录(将要复制到您已列为源的文件夹)。这意味着您需要-T选项。

或者,如果该glob捕获了您真正关心的所有文件,则可以使用/var/www/vhosts/website/httpdocs/*的源。这也应该有用。

答案 1 :(得分:0)

您想在文件存在于aontherwebsite下而不是在源网站中时使用Wat吗? 我认为您希望另一个网站是一个精确的副本,因此请确保先删除旧文件。

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

编辑:另一个网站应该保持可用。 一般技巧是使用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}是一个目录。 你还有3个挑战: 1)如何删除不再使用的文件(yesterday_special_action.html) 2)您是否应该首先复制图像,以便客户在复制图像之前打开新页面 3)如果复制部件(磁盘已满)后复制/ tar失败,您有什么网站

我将发布一个解决这些挑战的新答案。

答案 2 :(得分: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文件作为最后一个) 。 但这似乎很花哨,坚持上面的解决方案中的短片。