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

Ubuntu下如何按文件名中的算术条件筛选并移动文件

Ubuntu下如何按文件名中的算术条件筛选并移动文件

嗨,这个需求在Ubuntu下用命令行就能轻松搞定,给你两个实用的方案,按需选择就行:

方案一:用find命令(支持递归搜索,也可限制仅当前目录)

如果你的文件分散在子目录里,或者想统一处理当前目录及子目录的文件,这个方案很合适:

# 替换成你实际的目标目录路径
target_dir="/path/to/your/target/folder"
mkdir -p "$target_dir"

find . -maxdepth 1 -type f -name "image_*_*.png" -exec sh -c '
for file do
  # 分割文件名,提取N1和N2的数值
  IFS="_." read -r ignore n1 n2 ext <<< "$(basename "$file")"
  # 判断N2等于0且N1小于等于18003
  if [ "$n2" -eq 0 ] && [ "$n1" -le 18003 ]; then
    mv "$file" "$target_dir/"
  fi
done
' sh {} +

命令说明:

  • -maxdepth 1:限制仅搜索当前目录,去掉这个参数就会递归搜索所有子目录
  • -type f:只处理普通文件,避免误操作目录
  • -name "image_*_*.png":先筛选出符合命名格式的PNG文件,缩小处理范围
  • 后面的shell脚本会把每个匹配的文件拆分,提取N1和N2的数值,再做算术判断,符合条件就移动到目标目录

方案二:直接用for循环(仅当前目录,更简洁高效)

如果所有目标文件都在当前目录,没有子目录需要处理,这个方案更简单直接:

# 替换成你实际的目标目录路径
target_dir="/path/to/your/target/folder"
mkdir -p "$target_dir"

# 先筛选出N2=0的文件,再判断N1的数值
for file in image_*_0.png; do
  # 提取N1部分:去掉开头的"image_"和结尾的"_0.png"
  n1="${file#image_}"
  n1="${n1%_0.png}"
  # 判断N1是否小于等于18003
  if [ "$n1" -le 18003 ]; then
    mv "$file" "$target_dir/"
  fi
done

温馨提示:

  • 一定要把命令里的/path/to/your/target/folder换成你实际要移动到的目录,比如~/selected_images或者/home/yourname/my_images
  • 不确定命令是否正确的话,可以先把mv换成echo,这样会先打印出要移动的文件,确认无误后再改回mv
  • mkdir -p会自动创建目标目录(如果不存在的话),避免移动时因为目录不存在报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:05:28