如何批量移动含cover的文件至不同位置的同名父文件夹?
批量移动含cover/Cover的文件到对应目录
核心思路
用find命令遍历原目录下所有含cover/Cover的文件,提取每个文件的父文件夹名称,在目标根目录下创建同名文件夹(不存在则创建),最后将文件移动到对应目录中。
实现命令
# 替换为你的实际路径 SOURCE_DIR="/mnt/folder1" TARGET_ROOT="/mnt/test/folder2" # 遍历所有含cover/Cover的文件,处理移动逻辑 find "$SOURCE_DIR" -type f -iname "*cover*" | while read -r cover_file; do # 获取文件的父文件夹名称 parent_folder=$(basename "$(dirname "$cover_file")") # 拼接目标目录路径 target_dir="$TARGET_ROOT/$parent_folder" # 创建目标目录(-p确保多级目录都能创建,已存在则不报错) mkdir -p "$target_dir" # 移动文件到目标目录 mv "$cover_file" "$target_dir/" done
关键参数说明
-iname "*cover*":忽略大小写匹配文件名,同时覆盖cover和Cover的情况,比分开写两个-name条件更简洁。dirname "$cover_file":获取当前文件的父文件夹完整路径,例如/mnt/folder1/subfolder 1。basename:从父文件夹路径中提取纯名称,例如subfolder 1。while read -r:相比for循环更安全,能正确处理文件名含空格、特殊字符的场景。
测试建议
执行前可以将mv "$cover_file" "$target_dir/"替换为echo mv "$cover_file" "$target_dir/",这样只会打印移动命令而不实际执行,确认路径无误后再去掉echo执行真实移动。
内容的提问来源于stack exchange,提问作者thimplicity
相关产品推荐
相关产品推荐

