Linux下如何复制目录文件名并将新目录所有文件内容替换为指定内容
正确实现方法及原脚本问题说明
原脚本存在的问题
- 循环遍历规则错误:
for filename in "~/files"仅会将~/files字符串作为唯一循环项,无法遍历目录下的所有文件 - 波浪号扩展被阻断:
~包裹在双引号中时,Bash不会将其解析为当前用户的家目录路径 - 变量引用错误:目标路径中写的
filename是固定字符串,没有通过$引用变量值,也没有提取原文件的纯文件名(去掉~/files/路径前缀) - 缺少目标目录创建步骤:未提前创建
~/new目录,cp命令会因目标路径不存在报错
正确实现脚本
# 先创建目标目录,-p参数避免目录已存在时报错 mkdir -p ~/new # 遍历~/files下所有内容 for file_path in ~/files/*; do # 仅处理普通文件,跳过子目录(如果不需要过滤子目录可删除该if判断 if [ -f "$file_path" ]; then # 提取纯文件名(不带路径前缀) file_name=$(basename "$file_path") # 复制test文件的内容到目标路径对应文件 cp ~/test ~/new/"$file_name" fi done
兼容特殊文件名的单行实现(可选)
如果要适配带空格、换行等特殊字符的文件名,可使用find命令实现:
mkdir -p ~/new && find ~/files -maxdepth 1 -type f -printf "%f\0" | xargs -0 -I {} cp ~/test ~/new/{}
内容的提问来源于stack exchange,提问作者Luke Dunn
相关产品推荐
相关产品推荐

