find命令处理奇葩命名文件

linux中的find命令十分好用,特别是在需要批量处理文件时,可以用配合其他命令使用。

但是find命令本身的-exec参数实在太弱了,只能执行单一命令(无法用&&连接命令),无法多线程并行处理,对特殊文件名也无能为力。

使用find配合xargs就能比较好的处理这些情况了。

记录一下自己整理的find+xargs批量处理命令,可以解决奇葩命名,并行处理和&&连接命令的问题:

例如查找所有jpg文件,转换成webp

find . -name "*.jpg" -print0 | xargs -0 -n 1 -P 4  -I {}  sh -c 'cwebp -q 40 "$1" -o "${1%.jpg}.webp" && rm "$1"' sh {}

其中find-print0xargs-0配合使用,表示元素以0分隔,避免参数包含空格被截断。

xargs的参数-n表示一次传给要执行命令的参数个数,一般为1。-P表示并行进程数,依照机器性能指定。

在单引号里面的内容就是要执行的命令了,用$1表示传入参数。

@

Show Comments