You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu Server 22.04.2 LTS下批量按指定格式创建文件夹并移动对应文件的方法咨询

Ubuntu Server 22.04.2 LTS下批量按指定格式创建文件夹并移动对应文件的方法咨询

我有大约100个文件,文件名格式如下:"1999 - Film Title.avi" 和 "2025 - Another Film Title.avi" 等。我想把每个文件移动到单独的文件夹中,文件夹名格式示例为:"Film Title (1999)" 和 "Another Film Title (2025)"。这种操作是否可行,还是必须手动逐个完成?

我正在使用Ubuntu Server(Ubuntu 22.04.2 LTS)。

thank you

当然可以批量完成,完全不用手动一个个折腾!我给你提供两种简单的命令行方法,都能在你的Ubuntu Server上轻松搞定:

方法一:使用awk+sed处理文件名

直接在终端执行下面的循环命令就行,它会自动处理当前目录下所有.avi文件:

for file in *.avi; do
    # 从文件名中提取年份
    year=$(echo "$file" | awk -F ' - ' '{print $1}')
    # 提取电影标题并去掉.avi后缀
    title=$(echo "$file" | awk -F ' - ' '{print $2}' | sed 's/\.avi$//')
    # 拼接目标文件夹名称
    folder="${title} (${year})"
    # 创建文件夹(-p参数确保即使父目录不存在也不会报错)
    mkdir -p "$folder"
    # 移动文件到对应文件夹
    mv "$file" "$folder/"
done

方法二:纯Bash参数扩展(更高效)

如果不想依赖awk、sed这些外部工具,可以用Bash内置的参数扩展功能,速度更快:

for file in *.avi; do
    # 先去掉文件名的.avi后缀
    base=${file%.avi}
    # 提取年份(分割点是" - ")
    year=${base%% - *}
    # 提取电影标题
    title=${base#* - }
    # 拼接文件夹名并执行创建+移动操作
    folder="${title} (${year})"
    mkdir -p "$folder" && mv "$file" "$folder/"
done

注意事项

  • 先测试再执行:可以把命令里的mv "$file" "$folder/"改成echo mv "$file" "$folder/",这样只会输出要执行的移动命令,不会真的移动文件,确认格式没问题后再改回去。
  • 特殊字符兼容:脚本里用双引号包裹所有变量,所以即使文件名里有空格、括号这类特殊字符也能正常处理。
  • 指定文件路径:如果文件不在当前终端所在的目录,把*.avi换成完整路径,比如/home/yourname/movies/*.avi

备注:内容来源于stack exchange,提问作者Diffusive9076

火山引擎 最新活动