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
相关产品推荐
相关产品推荐

