Bash 通过将文件复制到子文件夹防止CP硬链接

Bash 通过将文件复制到子文件夹防止CP硬链接,bash,unix,Bash,Unix,我有一个这样的文件夹结构 a/ -b/ -c.txt -d.txt -backups/ 我想将文件夹a的内容移动到backups中,因此文件夹结构如下 a/ -b/ -c.txt -d.txt -backups/ -b/ -c.txt -d.txt 以下是我迄今为止使用的命令 for d in a/*/ ; do mkdir -p ${d}backups/ cp -ra ${d}* backups done 我进行文件夹备份,然后尝试将内容复制到ba

我有一个这样的文件夹结构

a/
-b/
-c.txt
-d.txt
-backups/
我想将文件夹
a
的内容移动到
backups
中,因此文件夹结构如下

a/
-b/
-c.txt
-d.txt
-backups/
    -b/
    -c.txt
    -d.txt
以下是我迄今为止使用的命令

for d in a/*/ ; do
    mkdir -p ${d}backups/
    cp -ra ${d}* backups
done
我进行文件夹备份,然后尝试将内容复制到
backups
文件夹中。但是,我得到一个错误:CP硬链接无法将文件夹复制到自身。我该怎么做

谢谢

它正在尝试将“备份”复制到“备份”中,因此您需要确保从a/*/模式中排除“备份”

您可能应该使用“find”来查找具有给定模式的文件,并排除“backup”目录。使用“查找”,您可以执行“-不命名备份”

使能 通过
shopt-s extglob
并执行
cp-r!(备份/)备份
。结果如下:

a
├── b
├── backups
│   ├── b
│   ├── c.txt
│   └── d.txt
├── c.txt
└── d.txt

3 directories, 4 files

我知道rsync可以排除文件,但在模式中我该怎么做呢?看:是的,我以前不知道extglob,但它非常酷!很好的快速修复。
a
├── b
├── backups
│   ├── b
│   ├── c.txt
│   └── d.txt
├── c.txt
└── d.txt

3 directories, 4 files