Zsh环境下如何按文件列表将指定文件复制到新目录
实现方案说明
不需要专门编写独立的.sh脚本,单条命令行即可一次性完成需求;如果后续需要重复执行同类操作,也可以写个轻量脚本提升复用性。
单条命令行实现(单次操作推荐)
- 先创建目标目录c,避免复制时报路径不存在的错误:
mkdir -p c - 执行复制命令,直接读取a.txt的文件列表,从b目录取对应有效文件复制到c:
xargs -a a.txt -I {} cp "b/{}" c/
注意:绝对不要省略源文件路径的
b/前缀,否则会错误读取a.txt同路径下的空同名文件,达不到复制有效JSON文件的目的。
轻量.sh脚本实现(重复调用推荐)
如果后续需要多次执行同类文件提取操作,可以写个带基础校验的脚本,容错性更高,脚本内容如下:
#!/bin/bash # 校验依赖的文件和目录是否存在 if [ ! -f "a.txt" ]; then echo "报错:文件列表a.txt不存在" exit 1 fi if [ ! -d "b" ]; then echo "报错:源文件目录b不存在" exit 1 fi # 自动创建目标目录 mkdir -p c # 逐行读取文件名复制,自动跳过空行 while IFS= read -r file_name; do [ -z "$file_name" ] && continue cp "b/$file_name" "c/" done < a.txt echo "操作完成:a.txt列出的所有有效文件已从b目录复制到c目录"
脚本写完后给执行权限即可运行:chmod +x copy_files.sh && ./copy_files.sh
注意事项
- 执行命令或脚本前,确认当前终端工作路径和a.txt、b目录处于同一级,否则请把路径替换为对应绝对路径
- 上述命令默认兼容文件名带空格、末尾带多余空格的场景,和给出的示例文件命名规则完全匹配
- 如果需要确认复制结果,可以执行
ls c/对比文件列表和a.txt记录是否一致
内容的提问来源于stack exchange,提问作者codingcat
相关产品推荐
相关产品推荐

