Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BASH:将所有文件和目录复制到同一父目录中的另一个目录中_Bash_Copy_Glob_Cp - Fatal编程技术网

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,后面有一个
/
。非常感谢。