如何复制目录名包含指定字符串的目录,适配匹配Rob G、Marwa E场景
解决方案
你可以直接使用修改后的如下命令实现需求:
mkdir -p destination_folder || exit 1 find . -path ./destination_folder -prune -o \ -type d \( -name "Rob G" -o -name "Marwa E" \) \ -exec cp -r {} destination_folder/ \;
逻辑修改说明
- 原命令中
-type f代表只匹配普通文件,改为-type d后限定只搜索目录 - 新增
\( -name "Rob G" -o -name "Marwa E" \)条件组,直接匹配你指定的两个目标目录名,无需额外读取名单文件;如果后续需要调整匹配列表,也可以改回原逻辑从txt文件读取人名,把上述条件替换为-name "$name"即可 - 给
cp命令增加-r参数,实现递归复制整个目录的所有内容
如果你的目录结构里存在多个同名的目标目录(比如示例里2021年1月和10月各有一个Marwa E目录),直接复制会出现后复制的目录覆盖先复制的同名目录的问题,可以用下面的优化版本,给每个复制的目录加上原路径前缀避免重名:
mkdir -p destination_folder || exit 1 find . -path ./destination_folder -prune -o \ -type d \( -name "Rob G" -o -name "Marwa E" \) -print0 | while IFS= read -r -d '' dir_path; do # 将原路径里的斜杠替换为下划线作为新目录名,保留路径信息同时避免重名 new_dir_name="${dir_path//\//_}" cp -r "$dir_path" "destination_folder/${new_dir_name}" done
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

