我尝试制作一个简单的脚本,将我的$HOME
复制到$HOME
中名为Backup/
的另一个文件夹中。这包括所有隐藏文件和文件夹,并排除Backup/
本身。我现在对复制部分的内容如下:
shopt -s dotglob
for file in $HOME/*
do
cp -r $file $HOME/Backup/
done
Bash告诉我它无法将Backup/
复制到自身中。但是,当我检查$HOME/Backup/
的内容时,我发现$HOME/Backup/Backup/
存在。
Backup/
的副本本身没用。如何让bash复制除Backup/
以外的所有文件夹。我尝试使用extglob
并使用cp -r $HOME/!(Backup)/
,但它并没有复制我需要的隐藏文件。
答案 0 :(得分:3)
尝试rsync。你可以排除文件/目录。
这是一个很好的参考
http://www.maclife.com/article/columns/terminal_101_using_rsync_locally
答案 1 :(得分:2)
雨果,
这样的剧本很好,但你可以试试这个:
cp -r *备份/; cp -r。*备份/;
备份使用的另一个工具是tar。这会压缩您的备份以节省磁盘空间。
另请注意,*不包括在内。隐藏文件。
答案 2 :(得分:1)
我同意使用rsync
是更好的解决方案,但有一种简单的方法可以跳过bash
中的目录:
for file in "$HOME/"*
do
[[ $file = $HOME/Backup ]] && continue
cp -r "$file" "$HOME/Backup/"
done
答案 3 :(得分:0)
这不能直接回答您的问题(其他答案已经这样做了),但是当您想使用cp进行备份时,请尝试cp -ua
。这会复制目录,复制而不是跟随链接,保留权限,只有在文件比目标副本更新时才复制文件。