我在一个父目录accdb
下的多个目录下都有一个名为dist
的文件夹。我想在保留代码结构的同时为所有目录复制accdb
的内容
我成功地通过以下方式制作了递归文件夹结构:
cd ~/dist; find . -name "accdb" -type d -exec mkdir -p -- ~/acc_trial/{} \;
但是我无法复制accdb
的内容。此命令只是使结构一直到目录accdb
。
我尝试了
find . -name "accdb" -type d -exec mkdir -p -- ~/acc_trial/{} \ && cp -r {} ~/acc_trial/{} \;
我得到一个错误:
查找:`-exec'缺少参数
答案 0 :(得分:0)
我不知道仅使用find表达式是否可以实现,我很确定这是不可能的。此外,您还必须考虑到,如果在一个accdb
文件夹中有一个名为accdb
的子文件夹,您可能会得到一个错误,这就是为什么在我制作的脚本中我决定使用rsync的原因:>
#!/bin/bash
DEST='/home/corronx/provisional/destination_dir'
#Clean destination directory, PLEASE BE CAREFUL IT MUST BE A REMOVABLE DIRECTORY
rm -rf $DEST/*
FIND='test'
LOOK_PATH='/home/corronx/provisional'
FILES=($(find . -type d -name $FIND))
for ((i=0; i<${#FILES[@]};i++))
do
#Remove first character .
FILES[$i]=${FILES[$i]:1:${#FILES[$i]}}
#Create directories in destination path
mkdir -p $DEST${FILES[$i]}
rsync -aHz --delete ${FILES[$i]:1:${#FILES[$i]}}/ $DEST${FILES[$i]}
echo $i
done
首先,我建议您在脚本中使用完整路径,因为脚本内部的rm -rf
表达式非常危险(如果要在运行脚本之前注释该行并删除目标文件夹)。
DEST
=目标路径。
FIND
=您正在寻找的子文件夹名称。
LOOK_PATH
=您要执行查找的路径
我创建了一个名为FILES
的数组,其中包含所有返回find表达式的文件夹,之后我仅创建目标目录并运行rsync
复制文件,因此我使用rsync
是因为我认为最好是在子目录中使用相同的名称。
请注意rm -rf
表达式,如果未设置DEST,则将删除计算机中的所有内容