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

Bash目录复制脚本异常:仅复制目录内容而非目录本身的技术问询

解决Bash脚本仅复制目录内容而非目录本身的问题

我一眼就看出问题出在哪了——你脚本里的cp -R $i/ ../simple_done_updated/这行,末尾的斜杠/是关键!当你在目录名后面加斜杠时,cp会理解为“复制这个目录里面的所有内容”,而不是把目录本身连同内容一起复制过去。这就是为什么你只看到目录里的文件出现在目标位置,却没看到目录本身。

快速修复方案

直接把斜杠去掉就行,同时记得给变量加双引号(避免目录名含空格时出问题):

cp -R "$i" ../simple_done_updated/

更稳健的脚本优化

另外,原来用for i in $LINES的方式读取文件有个隐患:如果你的目录名里有空格或者特殊字符,这个循环会把目录名拆成多个部分处理。推荐换成while循环来逐行读取,这样能完美处理各种复杂的目录名。优化后的脚本如下:

#!/bin/bash
# 复制文件到目标目录(如果不需要保留副本,其实可以直接读取原路径的文件)
cp "files_for_moving.txt" /Users/johndoe/project/for_moving
# 切换目录失败时直接退出,避免后续执行错误操作
cd /Users/johndoe/project/for_moving || exit

# 逐行读取文件,IFS=保证保留行首行尾空格,-r避免转义字符被解析
while IFS= read -r target_dir; do
    # 跳过空行,同时检查目标是否是真实存在的目录
    if [[ -n "$target_dir" && -d "$target_dir" ]]; then
        echo "正在复制目录: $target_dir"
        cp -R "$target_dir" ../simple_done_updated/
    fi
done < "files_for_moving.txt"

cd /Users/johndoe/project

额外提醒

如果files_for_moving.txt里写的是相对路径,一定要确保脚本执行时的工作目录和你预期的一致;如果怕出问题,直接写目录的绝对路径会更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:17:37