You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:39:05