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

find命令结合printf与bzip2时,如何实现打印文件名并完成压缩?

解决方法

方法一:用find -exec组合打印与压缩操作

直接通过find的-exec选项执行两个命令,既打印文件名又完成压缩,还能兼容子目录中的文件:

find . -name "*.sb.*" -exec sh -c 'echo "$(basename "$1")"; bzip2 "$1"' _ {} \;
  • basename "$1" 提取文件的纯文件名(对应原命令里的%f),再用echo输出到终端
  • bzip2 "$1" 对找到的完整路径文件执行原地压缩
  • _ 是sh -c脚本的占位参数,{} 代表find匹配到的每个文件路径

方法二:修正管道命令,兼顾打印与压缩

如果偏好管道+xargs的写法,可通过指定替换符实现打印与压缩的组合,同时处理含空格的文件名:

find . -name "*.sb.*" -print0 | xargs -0 -I {} sh -c 'echo "$(basename "{}")"; bzip2 "{}"'
  • -print0 和 -0 配合,避免文件名含空格时出现错误
  • -I {} 定义替换标记,把每个文件路径传入sh -c执行后续操作

原命令不打印文件名的原因

原命令中find的printf "%f\n"输出全部通过管道传给了xargs,所有内容都作为bzip2的输入参数,没有输出到终端,因此看不到文件名打印。

内容的提问来源于stack exchange,提问作者mahmood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:18:18