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

基于含空格文件名批量移动文件至对应子目录的脚本需求

批量移动含空格文件名到对应子目录的脚本实现

没问题,我帮你写个bash脚本来搞定这个批量归类的需求——完美适配带空格的文件名,自动根据前缀创建目录并移动文件,处理几百个文件完全不在话下。

核心思路

从每个文件名中提取最后一个空格之前的内容作为目标目录名(比如foo-foo bar-bar-bar1 5644.jpg会提取出foo-foo bar-bar-bar1),然后自动创建该目录(如果不存在),最后把文件移动进去。

完整脚本

#!/bin/bash

# 遍历当前目录下的所有文件(如果要指定目录,把*换成/path/to/your/files/*)
for file in *; do
    # 只处理普通文件,跳过目录
    if [ -f "$file" ]; then
        # 提取最后一个空格前的内容作为目录名
        dir_name="${file% *}"
        # 创建目录(-p参数确保父目录存在,且目录已存在时不报错)
        mkdir -p "$dir_name"
        # 移动文件到目标目录,-n参数避免覆盖同名文件(可选,不需要可以去掉)
        mv -n "$file" "$dir_name/"
    fi
done

脚本细节解释

  • "$file":必须加双引号!否则带空格的文件名会被bash拆分成多个参数,导致脚本出错。
  • ${file% *}:这是bash的参数扩展语法,作用是删除变量file中从最后一个空格开始到结尾的所有内容,正好匹配你需要的前缀提取逻辑。
  • mkdir -p "$dir_name":-p参数非常实用,它会自动创建所有不存在的父目录,而且如果目标目录已经存在,也不会抛出错误信息,适合批量处理场景。
  • mv -n "$file" "$dir_name/":-n参数是可选的,加上它后,如果目标目录里已经有同名文件,脚本会跳过移动,避免覆盖原有文件;如果不需要这个保护,可以直接用mv "$file" "$dir_name/"。

测试建议

在正式运行脚本前,你可以先把mv命令改成echo mv,这样脚本只会输出要执行的移动操作,不会真的移动文件,方便你验证逻辑是否正确:

echo mv -n "$file" "$dir_name/"

比如你有这些文件:

  • foo-foo bar-bar-bar1 5644.jpg
  • foo-foo bar-bar-bar1 5648.jpg
  • foo-foo bar-bar-bar2 123.jpg

运行脚本后,会自动创建foo-foo bar-bar-bar1和foo-foo bar-bar-bar2两个目录,对应的文件都会被移动到各自的目录里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:29:17