我有类似的文件结构:
/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