Linux下文件分目录移动脚本问题:目标存在时转存至指定目录
解决方案
你的问题出在mv -n的退出码逻辑上:当它跳过已存在的文件时,返回的退出码是0(成功),而非错误码,所以原脚本里的if [ $? != 0 ]永远不会触发移至dir3的操作。
换个思路,先检查目标目录dir2中是否存在同名文件,再决定移动路径:
#!/bin/bash # 提前确保目标目录存在,避免移动时因目录不存在报错 mkdir -p dir2 dir3 for file in dir1/*; do # 跳过dir1中的非文件(比如子目录),只处理普通文件 [ -f "$file" ] || continue # 提取文件的纯名称(去掉前缀路径) filename=$(basename "$file") # 检查dir2中是否已存在同名文件 if [ -f "dir2/$filename" ]; then mv "$file" dir3/ else mv "$file" dir2/ fi done
关键细节说明:
mkdir -p可以一次性创建多级目录,且目录已存在时不会报错- 用
[ -f "$file" ]过滤掉非文件对象,避免误操作子目录 - 所有变量用双引号包裹,防止文件名包含空格、特殊字符时出现逻辑错误
- 用
basename提取纯文件名,简化对dir2中同名文件的检查逻辑
内容的提问来源于stack exchange,提问作者gaurav sharma
相关产品推荐
相关产品推荐

