如何批量创建子文件夹并将匹配规则的文件移动至对应目录
问题原因分析
- find命令的搜索路径使用了
.,指代的是脚本执行时的当前工作目录,而非你遍历到的$dir目标子目录,无法匹配到a、b、c等目录下的目标文件。 - mv命令的目标路径写为
./x,同样是相对当前工作目录的路径,但你创建的x目录实际路径为$dir/x,当前工作目录不存在x文件夹,因此触发路径不存在的报错。
修复后可直接运行的脚本
pth=path/to/p # 遍历p目录下的所有一级子目录(a/、b/、c/等) for dir in "$pth"/*/; do # 创建对应子目录下的x文件夹,-p参数避免重复创建时报错 mkdir -p -- "$dir/x" # 搜索当前遍历的子目录下所有名称匹配*match*的文件,移动到对应x目录下 find "$dir" -type f -name '*match*' -exec mv -t "$dir/x" -- {} + done
补充说明
- 所有变量路径都增加了双引号包裹,避免路径中存在空格、特殊字符时出现解析异常。
find命令增加了-type f参数限定仅匹配普通文件,如果你需要同时移动名称匹配规则的目录,可以删除该参数。- 所有命令尾部增加了
--参数,避免文件名以-开头时被系统误识别为命令参数导致执行失败。
内容的提问来源于stack exchange,提问作者Al_Mt
相关产品推荐
相关产品推荐

