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

Bash脚本问题:复制/etc下s开头文件并合并后删除副本

修正后的脚本及问题解析

原脚本的核心问题

  • 错误1:误复制子目录内的文件:find /etc/s* -type f会先匹配/etc下所有以s开头的文件和目录,对匹配到的目录会递归查找其中的所有文件,导致子目录内的非s开头文件也被复制。
  • 错误2:内容覆盖而非追加:$i > /root/resume每次用单个文件内容覆盖resume,最终仅保留最后一个文件的内容,且缺少删除复制文件的步骤。

方案1:使用find精准匹配文件

# 复制/etc目录下直接的、以s开头的文件到/root(排除子目录)
for file in $(find /etc -maxdepth 1 -type f -name "s*"); do
    cp -vi "$file" /root
done

# 将所有复制的文件内容合并到resume
cat /root/s* > /root/resume

# 删除/root下复制来的s开头文件(不影响resume)
rm -v /root/s*

方案2:用通配符+文件判断(更简洁)

# 遍历/etc下以s开头的条目,仅处理文件
for file in /etc/s*; do
    [ -f "$file" ] || continue  # 跳过目录,只处理文件
    cp -vi "$file" /root
done

# 合并内容到resume
cat /root/s* > /root/resume

# 删除复制的文件
rm -v /root/s*

关键说明

  • -maxdepth 1(方案1):限制find仅查找/etc目录本身,不递归子目录。
  • [ -f "$file" ](方案2):判断当前条目是否为文件,跳过目录。
  • cat /root/s* > /root/resume:一次性合并所有目标文件内容,比循环追加更高效。
  • rm -v /root/s*:仅删除/root下以s开头的文件,resume文件名不符合,不会被误删。

内容的提问来源于stack exchange,提问作者agm_2502

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:03:32