find + xargs组合删除文件 (rm) 或移动文件 (mv)

1.删除文件示例 (rm)

假设你要删除 /path/to/dir 下所有 .log 文件:

1
find /path/to/dir -type f -name "*.log" -print0 | xargs -0 rm -f

解释

  • -type f → 只匹配文件
  • -name "*.log" → 匹配 .log 后缀
  • -print0 → 用 null 字符分隔文件名(防止空格或特殊字符出错)
  • xargs -0 → 配合 -print0 安全处理文件名
  • rm -f → 强制删除

⚠️ 小心使用 rm,建议先打印确认:

1
find /path/to/dir -type f -name "*.log" -print0 | xargs -0 echo rm -f

2.移动文件示例 (mv)

假设你想把 /path/to/dir 下所有 .txt 文件移动到 /backup/dir

1
find /path/to/dir -type f -name "*.txt" -print0 | xargs -0 -I {} mv {} /backup/dir/

解释

  • -I {} → 表示将 find 输出的每个文件替换 {}
  • 每个匹配的文件会执行一次 mv {} 到目标目录
  • 使用 -print0 + xargs -0 可安全处理文件名带空格或特殊字符

如果文件很多,也可以用批量移动(一次处理多个文件):

1
find /path/to/dir -type f -name "*.txt" -exec mv -t /backup/dir/ {} +

这里 -exec ... {} + 会尽量一次传多个参数给 mv,效率比 xargs 高。