想要做的事情可能非常简单,下面是目录结构:
/home/user/app-data/Unique container ID/path/to/files
我试过了:
cp -r /home/user/app-data/*/path/to/files /storage/location
显然,这会抓取我想要的所有文件,这些文件位于目标位置的最末端。我想将每个唯一目录结构中的最后一个文件夹复制到保存位置,并从唯一 ID 开始维护目录结构。因此,我抓取的每个文件夹的最终存储产品将如下所示:
/storage/location/Unique ID grabbed by the wildcard/path/to/files
答案1
cp
复制源的叶子(路径的最后一部分),并在您的例子中*
匹配一个或多个叶子对象。即使-r
将以递归方式复制目录,最好还是使用-a
来保留所有属性。
cp -r /home/user/app-data/* /storage/location
如果您需要更多高级过滤选项,您可以结合使用find
和cpio
。
在这个例子中我们仅复制目录结构:
find /home/user/app-data \
-type d -links 2 -printf %P\\0 | \
cpio -0 -pvdmu -D /home/user/app-data -- /storage/location
(事实上,没有子目录的目录只有两个硬链接.
,..
我们可以利用它-links 2
来获取所有最终目录,无论您如何构建过滤器,最重要的是find
具有cpio
相同的起点)。
答案2
尝试这个:
for f in */path/to/files
do
d="${f%/*}"
d="/path/to/files/storage/location/$d/"
mkdir -p "$d"
echo cp -r "$f" "$d"
done
第一的,更改
/path/to/files
为反映您想要的目录内的实际源路径Unique container ID
,并保留它*
之前的。下一个,更改
/path/to/files/storage/location
为您想要复制文件的实际目标路径,然后保留/
其后面的。然后,
cd
到/home/user/app-data
。在那之后,运行上述代码进行试运行。
最后
echo
,当对结果满意时,删除以进行实际复制。