Linux下如何根据txt文件内名称批量匹配并拷贝含子目录的目录
报错根因
你猜测的排序问题不存在,报错是原有命令的多处语法、逻辑错误导致:
- 变量未正确展开:用单引号包裹
$line时,Shell不会将其解析为变量,实际传递的是固定字符串$line而非读取到的目录名 - 逻辑冗余:不需要调用
grep,通过read已经拿到了目标目录名,直接使用即可 - 复制参数缺失:
cp默认不支持复制目录,缺少-r参数无法递归拷贝目录下的子目录和所有内容 - 参数不匹配:
xargs -r0要求输入以null字符分隔,你当前的输入是换行分隔的,导致传给cp的路径格式完全错误,最终触发找不到文件的报错
可行解决命令
首先将下方命令中的/path/to/your/desired_destination替换为你实际要拷贝到的目标路径即可:
while IFS= read -r dir_name; do # 仅当目录存在时才执行复制,避免无意义报错 [ -d "$dir_name" ] && cp -r "$dir_name" /path/to/your/desired_destination/ done < names.txt
如果需要更简洁的写法,也可以直接用xargs实现:
xargs -I {} cp -r {} /path/to/your/desired_destination/ < names.txt
内容的提问来源于stack exchange,提问作者Diego Munoz
相关产品推荐
相关产品推荐

