Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash:查找目录中的所有文件,并使用部分名称作为命令的参数_Bash_Find - Fatal编程技术网

bash:查找目录中的所有文件,并使用部分名称作为命令的参数

bash:查找目录中的所有文件,并使用部分名称作为命令的参数,bash,find,Bash,Find,我需要获取目录中的所有jpg文件,并对每个文件执行以下命令: mycommand -in <imagebasename>.jpg -out <imagebasename>.tif --otherparam paramvalue 但这会将类似“/.jpg”的内容传递给mycommand。 我只需要通过考试 我不需要递归地处理目录。试试: find . -name "*.jpg" -exec sh -c 'mycommand -in $0 -out "${0%.*}.tif

我需要获取目录中的所有jpg文件,并对每个文件执行以下命令:

mycommand -in <imagebasename>.jpg -out <imagebasename>.tif --otherparam paramvalue
但这会将类似“/.jpg”的内容传递给mycommand。 我只需要通过考试

我不需要递归地处理目录。

试试:

find . -name "*.jpg" -exec sh -c 'mycommand -in $0 -out "${0%.*}.tif" --otherparam paramvalue' {} \;
这将把形式为
mycommand-in.jpg-out.tif--otherparam paramvalue
的命令传递给
-exec

编辑:要删除前导的
/
,您可以说:

find . -name "*.jpg" -exec bash -c 'f={}; f=${f/.\//}; echo mycommand -in "${f}" -out "${f%.*}.tif" --otherparam paramvalue' {} \;

(请注意,
-exec
的解释器已更改。)

是否也尝试查找与当前目录相关的文件递归目录?这将生成
mycommand-in./imagebasename.jpg-out./imagebasename.tif--otherparam paramvalue
。如何去掉开头的“/”?因为我的答案是基于你在我的一个问题中的回答。。。让我们留下你的答案吧!这就是内婚:D@fedorqui不,我不会这么想或这么说。@fedorqui相反,这是一个计算在哪里应用给定解决方案的问题。甚至这也需要一些东西。@devnull我指的是有趣意义上的内婚制:我们使用和重复使用问题和答案。由于你的解决方案和我的非常相似,我现在更愿意保留你的,因为我写的是基于你教我的。
find . -name "*.jpg" -exec bash -c 'f={}; f=${f/.\//}; echo mycommand -in "${f}" -out "${f%.*}.tif" --otherparam paramvalue' {} \;