Linux下批量复制重命名不同子目录同名文件至独立目录的方法
问题解决与代码错误分析
正确实现代码
先创建目标目录,再通过循环逐个处理每个dog.txt文件:
# 先创建目标目录,-p参数避免目录已存在时报错 mkdir -p johns_dogs # 遍历所有符合路径的dog.txt文件 for fname in user/john/*/dog.txt; do # 提取当前dog.txt所在的父目录名(比如john1、john2) dir_name=$(basename "$(dirname "$fname")") # 构造新的文件名和目标路径 new_file="johns_dogs/${dir_name}_dog.txt" # 复制文件到目标位置 cp "$fname" "$new_file" done
原代码无效的原因
- 变量赋值语法错误:
new_name=basename $(PWD)写法错误,命令替换需要用$()或反引号包裹,而且$(PWD)取的是当前工作目录的路径,不是每个dog.txt所在的父目录名,完全不符合需求。 - cp命令用法错误:
cp user/john/*/dog.txt > $new_name.txt里的>是重定向输出的符号,cp的正确用法是cp 源文件 目标路径,这里不仅语法错,还每次循环都复制所有dog.txt到同一个文件,会导致文件内容被覆盖。 - 未利用循环变量:循环定义了
fname来存储每个dog.txt的路径,但代码里完全没用到这个变量,等于白做了循环。
内容的提问来源于stack exchange,提问作者amulyabaral
相关产品推荐
相关产品推荐

