我正在尝试使用两个不同的可执行文件构造一个find命令来处理目录中的一堆文件.不幸的是,-exec
在find上不允许使用管道,甚至\|
因为shell首先解释了该字符.
这是我正在尝试做的事情(由于管道结束了find命令,因此无效):
find /path/to/jpgs -type f -exec jhead -v {} | grep 123 \; -print
Martin Marco.. 79
试试这个
find /path/to/jpgs -type f -exec sh -c 'jhead -v {} | grep 123' \; -print
或者,您可以尝试将您的exec语句嵌入到sh脚本中,然后执行:
find -exec some_script {} \;
Palmin.. 12
稍微不同的方法是使用xargs:
find /path/to/jpgs -type f -print0 | xargs -0 jhead -v | grep 123
我总是觉得更容易理解和适应(-print0和-0参数是处理包含空格的文件名所必需的)
这可能(未经测试)比使用-exec更有效,因为它会将文件列表传递给xargs,并且xargs确保jhead命令行不会太长.
试试这个
find /path/to/jpgs -type f -exec sh -c 'jhead -v {} | grep 123' \; -print
或者,您可以尝试将您的exec语句嵌入到sh脚本中,然后执行:
find -exec some_script {} \;
稍微不同的方法是使用xargs:
find /path/to/jpgs -type f -print0 | xargs -0 jhead -v | grep 123
我总是觉得更容易理解和适应(-print0和-0参数是处理包含空格的文件名所必需的)
这可能(未经测试)比使用-exec更有效,因为它会将文件列表传递给xargs,并且xargs确保jhead命令行不会太长.