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

时间:2016-05-03 19:13:22

标签: 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

我制作文件夹备份然后尝试将内容复制到backups文件夹中。但是,我收到错误:CP Hardlink无法将文件夹复制到自身。我怎么能这样做?

谢谢

2 个答案:

答案 0 :(得分:2)

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

2 directories, 2 files

启用extglob  按shopt -s extglob并执行cp -r !(backups/) backups。结果如下:

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

3 directories, 4 files

答案 1 :(得分:1)

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

您应该使用“find”查找具有给定模式的文件并排除“backup”目录。使用find,您可以执行“-not -name backup”