我备份了一个目录,里面有许多目录和文件。最近有些文件丢失了。我只想把丢失的文件移过来。
我更喜欢移动文件而不是仅仅复制,因为这个特定的盒子上的空间非常宝贵,而且文件相当大。
如何在没有 GUI 的情况下通过命令行实现这一点?
答案1
快速而又简单的方法是使用带有 -n 或 --no-clobber 选项的 mv(move)命令。
来自 mv 手册页:
-n, --no-clobber
do not overwrite an existing file
例子:
你两个目录:
/文件/
/备份/
如果 /files 是缺少文件的原始目录,而 /backup 目录是您最新的备份,则命令为:
mv-n/备份/*/文件
如果您的 Linux/Unix 版本不支持 -n 选项,您可以使用 -i 选项执行相同的操作,只不过它会询问您是否要覆盖现有文件。您需要对每个文件回答否。如果目标目录中不存在该文件,它不会询问您。
来自 mv 手册页:
-i, --interactive
prompt before overwrite
即 mv -i /backup/* /files
当心。
吉姆
答案2
就我个人而言,我经常使用 rsync 来做这种事情。阅读手册页。有很多选项,需要学习的东西也很多,但从长远来看,我认为它是值得的。最好的部分是它是免费的,并且已经安装在大多数 Linux 系统上。
rsync 的选项包括仅更新自上次更新以来发生变化的文件、过滤某些文件和目录的能力、可以先进行试运行以及许多其他功能。值得注意的是,rsync 不仅可以在主机系统上的文件之间进行复制,还可以通过网络进行复制。因此,无论您如何备份文件,它都应该可以工作。快速查看手册页似乎 --remove-source-files 选项与移动文件类似。您甚至可能会发现您非常喜欢它,以至于下次会用它来进行备份。
答案3
使用试用版进行文件夹比较无可比拟,然后将文件移到那里。很简单。
答案4
与JimT的回答类似:
cd /backupdir
for file in `find . -type f`
do
yes no | mv -i $file /origdir/`dirname $file`
done
其中“/backupdir”是您的备份目录,“/origdir”是您的原始源目录。
“yes”命令对于处理交互式命令非常有用。在这种情况下,当要求覆盖现有文件时,它会自动回答“否”,因此只有丢失的文件才会被移动。