繁体   English   中英

BASH:将所有文件和目录复制到同一父目录中的另一个目录中

[英]BASH: Copy all files and directories into another directory in the same parent directory

我试图做一个简单的脚本复制了所有我的$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)/但是它没有复制我需要的隐藏文件。

尝试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 这将递归目录,复制而不是跟随链接,保留权限,并且仅在文件比目标副本新时复制文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM