BASH:将所有文件和目录复制到同一父目录中的另一个目录中
我正在尝试制作一个简单的脚本,将我所有的BASH:将所有文件和目录复制到同一父目录中的另一个目录中,bash,copy,glob,cp,Bash,Copy,Glob,Cp,我正在尝试制作一个简单的脚本,将我所有的$HOME复制到$HOME中名为Backup/的另一个文件夹中。这包括所有隐藏的文件和文件夹,不包括备份本身。我现在对复制部分的了解如下: shopt -s dotglob for file in $HOME/* do cp -r $file $HOME/Backup/ done Bash告诉我它无法将备份/复制到自身中。但是,当我检查$HOME/Backup/的内容时,我看到$HOME/Backup/Backup/存在 Backup/的副本本
$HOME
复制到$HOME
中名为Backup/
的另一个文件夹中。这包括所有隐藏的文件和文件夹,不包括备份本身。我现在对复制部分的了解如下:
shopt -s dotglob
for file in $HOME/*
do
cp -r $file $HOME/Backup/
done
Bash告诉我它无法将备份/
复制到自身中。但是,当我检查$HOME/Backup/
的内容时,我看到$HOME/Backup/Backup/
存在
Backup/
的副本本身是无用的。如何让bash复制所有文件夹(除了Backup/
)。我试着使用extglob
和cp-r$HOME/!(备份)/
但它没有复制我需要的隐藏文件。试试rsync。您可以排除文件/目录
这是一个很好的参考
http://www.maclife.com/article/columns/terminal_101_using_rsync_locally
雨果
这样的脚本很好,但您可以尝试以下方法:
cp-r*备份/;
cp-r.*备份/
另一个用于备份的工具是tar。这会压缩备份以节省磁盘空间
还要注意,*不包括。隐藏文件。我同意使用
rsync
将是一个更好的解决方案,但有一种简单的方法可以跳过bash
中的目录:
for file in "$HOME/"*
do
[[ $file = $HOME/Backup ]] && continue
cp -r "$file" "$HOME/Backup/"
done
这不会直接回答您的问题(其他答案已经回答了),但是当您想使用cp进行备份时,请尝试
cp-ua
。这将递归目录,复制而不是跟随链接,保留权限,并且仅复制比目标位置的副本更新的文件 我更愿意完全在bash中完成,但我会查看您的链接。在将所有内容复制到备份目录后,我将压缩归档文件。我有shopt-s dotglob
,以便*覆盖隐藏的点文件。我只需要一种方法,从整个事件中排除一个目录,因为在备份本身中有一个用于备份的目录副本是没有用的。我查找了您给我的test&&continue行的语法,它似乎应该可以工作,但是bash仍然给了我cp:cannot copy a directory into self
在每个cp
命令之前试着打印$file
的值,看看到底是哪个cp
参数导致了问题。打印$file
告诉我它没有跳过$HOME/Backup
。我尝试过将双括号改为单括号,并将其作为一个完整的if语句if[“$file”!=“$backupdir”];然后echo“$file”cp-r“$file”$backupdir fi
就好像它甚至没有计算if
。$backupdir
的确切值是多少?由于这是一个字符串比较,所以$file
和$backupdir
都需要相同:相同的目录路径、相同的尾随/
(或缺少尾随/
)等。逻辑上表示相同路径的两个不同字符串仍然会比较为不同。抱歉,我花了这么长时间才做出响应。这就是问题所在。我有$backupdir,后面有一个/
。非常感谢。