我想将一个目录的内容移动至具有相同文件夹的另一个目录内。
以下是一个例子:
我有./backup
包含目录base
和的文件test
。现在,我想将这些目录移动到./backupArchives
。
我用的是这个:
mv ./backup/* ./backupArchives
但我得到了错误
mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty
我尝试使用--force
,但没有成功。当文件夹已经存在时,有没有办法移动它?
注意:我只想合并内容,不覆盖。
答案1
虽然它的手册页没有记录这一点,但mv
如果目标目录包含文件,它将拒绝将目录重命名为另一个目录。这对你来说是一件好事,因为你最终想要合并将源的内容放入目标中,这是mv
不行的。
改用rsync -a backup/ backupArchives/
。之后rm -rf backup/*
。
除了使用rsync
,你也可以使用经典的
(cd backup && tar c .) | (cd backupArchives && tar xf -)
这将为您赢得更多的极客积分。
答案2
快速而肮脏,如果你知道自己在做什么:
cp -r ./backup/* ./backupArchives && rm -R ./backup/*
答案3
移动到目录后,您需要*
(代表任何文本或数字)。例如:
mv /var/www/* /recovery/wwwrecovery/
就这样,如果你移动文件,那么你可以这样移动:
mv /var/www/index.php /recovery/index.php
另一种方法是使用 tar 打包该文件夹内容:
tar -cvzpf backup.tar.gz /var/www
然后将其移到其他文件。我也推荐此步骤,因为 tar 会压缩它并使其大小变小。
要将文件提取到另一个文件夹,请使用
tar -xvzpf /var/www/
如果需要复制到不属于您的地方,请确保在sudo
您决定使用的选项后面加上该命令。
sudo tar -cvzpf backup.tar.gz /var/www/
答案4
当然rsync
可以,但对于不支持的机器rsync
(例如,在 cpanel 中,默认情况下未安装 rsync)也可能有效。
那么使用呢:
cd /path/to/backup/ && cp -R --parents ./* ../backupArchives
backup
然后根据需要删除目录
注意1:在执行之前,你需要cd
进入目录backup
cp -R --parents ...
注2:仔细检查backupArchives
目录是否从备份中获取了新文件。