查找与名称匹配的所有文件并更改为其路由

时间:2015-03-11 14:53:08

标签: bash shell

我正在尝试创建一个简单的脚本,遍历目录树,搜索名为“plot.plt”的文件,更改为其路由并在该目录中执行gnuplot(因为否则会丢失错误)。

到目前为止我已经尝试过了:

find . -type f -name "*.plt" -printf "%h\n" | xargs -i cd "{}"

但告诉我该目录不存在。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

您需要显式执行bash,因为xargs不运行shell。您需要在该shell调用中同时执行cdgnuplot,因为目录更改不会影响父进程。

find . -type f -name '*.plt' -printf '%h\n' | xargs -i bash -c 'cd "$0"; gnuplot' {}

答案 1 :(得分:0)

如果你可以使用一个小的附加脚本(也可以用作别名),你可以这样做

find . -iname "*.plt" -exec ./gnuplotcd {} \;

包含

的文件gnuplotcd
#!/bin/bash
cd `dirname $1`
gnuplot `basename $1`

别忘了chmod +x gnuplotcd