在 Linux 上复制特定子文件夹

在 Linux 上复制特定子文件夹

我有类似的文件结构:

/home/dave/documents/static/
/home/static/
/home/dave/pictures/static/
/home/dave/otherfolders/
...

我想从此目录中仅复制名为的文件夹static。这些文件夹也可以是子文件夹。并且它应该在新文件夹中形成与之前相同的结构。即:

cp -r /home/* /otherhome/

我尝试过这个:

find home/ -name 'static' -exec cp -r '{}/*' 'otherhome/{}' ';'

但我收到错误,指出/home/dave/documents/static/*其他静态文件夹不存在。我想我无法用 连接文件名/*。有什么办法吗?

答案1

问题是,当您尝试复制这些目录时,它们并不存在。您必须先创建它们。

find home -type d -name 'static' -print0 | while IFS= read -rd '' dir; do 
    newdir="${dir#home/}"
    mkdir -p otherhome/"$newdir"   
    cp -R "$dir" otherhome/"${newdir%static}"
done

home/我们需要从原始目录名称中删除,然后创建新的文件夹层次结构( mkdir -p)。然后我们递归复制内容,但我们还需要static从新目录的末尾删除,以免创建static/static

可能有更漂亮的方法来实现这一点。

之前和之后的示例:

.
├── home
│   ├── dave
│   │   ├── documents
│   │   │   └── static
│   │   │       └── Untitled.txt
│   │   ├── otherfolders
│   │   └── pictures
│   │       └── static
│   │           └── Untitled2.txt
│   └── static
└── otherhome
    ├── dave
    │   ├── documents
    │   │   └── static
    │   │       └── Untitled.txt
    │   └── pictures
    │       └── static
    │           └── Untitled2.txt
    └── static

相关内容