./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/*
,从而获得更多的极客积分。评论
好事情要知道!两者都很好。谢谢!
– UdK
13年3月20日在17:54
极客点是最好的点:D
– MadMike
13-10-11在12:54
应当注意,这要求您具有可用空间中的文件夹大小。如果没有的话,会引起可怕的问题。
– Pogrindis
2014年10月2日在21:07
@Pogrindis请说明将发生什么可怕的问题,以及这些问题与其他任何写入完整磁盘的尝试有何不同?确实,由于这两个操作都使原始目录保持完整,因此,如果操作失败,则只需rm -rf backupArchives而不会造成任何后果,更不用说“可怕”的了。
–zwets
2014年10月5日9:15
感谢您命名经典方法,如果rsync不可用,将非常有帮助!也可以使用sudo sh -c'(cd backup && tar c。)使用sudo。 (cd backupArchives && tar xf-)'
– ArendE
2015年6月23日在23:11
#2 楼
快速又肮脏,如果您知道自己在做什么:cp -r ./backup/* ./backupArchives && rm -R ./backup/*
评论
在我的安全模式下,也很巧妙。
–Banned_User
2014年12月23日在18:08
如果需要保留权限和上次修改时间,请添加--preserve
– slashdottir
20 May 19 '18:16
#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/
评论
我正在使用Ubuntu 12.10,并且得到:mv:invalid option-'R'尝试`mv --help'以获取更多信息。确实.tar很不错,但是我需要知道这种情况下如何移动文件。谢谢你的帮助
– UdK
2013年3月19日4:34
我使用12.04台式机和服务器,两者都工作良好。请小心,如果您没有在folfer和-R之间留空格。我也尝试了不带-R的情况下对我的工作方式,不带-R的情况下也要尝试,但请谨慎使用拼写:Linux会影响大小写字母!!!而不是路径不正确地移动或从位置移动。如果您没有该文件夹,则希望将其移动到-C之后,它将创建它。还要先尝试:找到文件夹的-iname名称,然后从根目录运行此命令,以查看它是否在其他地方存在(如果您遗漏了拼写错误)。给我你使用的确切命令
– Dimitris Theodoridis
13年3月19日在4:47
那该怎么办.......将该文件名放在**之间
– Dimitris Theodoridis
13年3月19日在4:54
-R当然不应该在第一个参数之后出现。选项(几乎)始终位于命令参数之前。另外,mv没有-R选项,最后,递归与mv不相关。 @DimitrisTheodoridis请先测试您的答案。
–zwets
13年3月19日在7:34
是的,我的兄弟,您说的对,我的拼写总是有问题,总之我找不到终端或命令的问题,或者创建了我不知道的新文件和目录,只是用于bas拼写...使用cp命令,而不是在这里为那个兄弟写了mv sory:D
– Dimitris Theodoridis
13年3月19日在17:23
#4 楼
当然,rsync
确实可以正常工作,但是对于不支持rsync
的机器(例如,在cpanel中,默认情况下未安装rsync的机器)也可以正常工作。 /> cd /path/to/backup/ && cp -R --parents ./* ../backupArchives
然后如有必要,请删除
backup
目录注1:在执行
cd
注2之前,需要先将
backup
移至cp -R --parents ...
目录。如果您从备份中获取了新文件,请仔细检查backupArchives
目录。#5 楼
在提出问题之前,让我们考虑一个简化的案例。假设在/ home / admin中,我们有两个文件夹
foo
和bar
,它们具有相同的子目录结构,但是每个文件夹中包含不同的文件。现在我们想将它们合并为一个。当我们执行mv foo/* bar
之类的操作时,会出现错误mv: directory not empty
。我的解决方案是放弃命令行工具,而切换到GUI文件管理器,例如dolphin。在海豚中将
foo
重命名为bar
时,它使您可以选择写入目标文件夹,并询问是否以交互方式覆盖现有文件。这样避免了复制和删除,实际上无需一行代码即可节省您的时间。PS:我并没有测试每个文件管理器。但是其中大多数应该具有此功能。
#6 楼
在脚本执行过程中移动目录时,您需要考虑不存在的目录或空目录,并在没有确认的情况下强制覆盖和删除:# If old directory exists, and isn't empty
if [[ -d old_dir ]] && [[ -n `ls -A old_dir` ]] ; then
# Make a new directory (skip if already exists)
mkdir -p new_dir
# Copy all files to the new directory (-afr : Keep attributes, Force overwrite, Recursive copy)
cp -afr old_dir/* new_dir/
# Remove old directory
rm -rf old_dir
fi
评论
您是只是试图将文件夹的内容合并到目标中,还是要覆盖目标中的内容。 (如果您有整个错误,也可以使用......截断数据,这也很有帮助)我只想合并内容,没有覆盖。
@UdK即使这行得通,请注意,这不会合并两个目录的内容。移动目录将替换其目标。看看rsync,它将进行合并。
相关:unix.stackexchange.com/questions/127712/merging-folders-with-mv