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




