2011-03-10 65 views
1

工作我试图在Linux中运行bash脚本(Ubuntu的,但也Fedora的),但它find命令将无法正常工作。查找没有脚本的工作,在终端提示

search=\"*${exten[iterext]}\" 
find $direc{iterdir} $r_option -iname $search exec -rm {} \\\; 

我们解释变量: 讯号分配延长是阵列从一个文本文件中读取的文件扩展名(这里没问题) 直销也通过命令行读取目录的数组。 Iterdir和iterext是cicle整型变量。

现在我有两个问题:

1-这find命令不会删除或显示为此事,如果我运行一个脚本里面;不过,如果我在查找之前放置一个回显,并将输出粘贴到命令提示符下,则查找工作正常。我试过在ubuntu下和Fedora的剧本,所以我认为这不是一个bash的配置问题。我应该注意,这个问题似乎是$ search,因为我用一个硬编码的字符串(如“* txt)替换了$ search,它在脚本内部工作,所以它似乎是一个引用问题。

2 - 我运行整个find命令也得到发现:。缺少参数“-exec”

请帮助:-(它的驾驶我疯狂

回答

2

开始简单放置在find命令,然后一切都不用担心参数化它

  1. ${exten[iterext]}应该${exten[$iterext]}
  2. $direc{iterdir}应该${direc[$iterdir]}
  3. exec -rm应该-exec rm
  4. \\\;应该\;
  5. 引用您的变量,以防止分词

下面将进行干运行感谢到echo。只需删除echo您满意进行删除输出的时候。

find "${direc[$iterdir]}" "$r_option" -name "*${exten[$iterext]}" -exec echo rm {} \; 
+0

辉煌!!!!有用。非常感谢你! – PTGuy 2011-03-10 20:59:11

+0

@PTGuy:NP,欢迎StackOverflow的,不要忘记点击勾选接受的答案。 – SiegeX 2011-03-10 21:00:06

+0

完成:-)在bash行情可能会有点daunting.Yeah(因为我是一个VM内运行手写)我没有正确复制的代码,但它仍然是错了,所以......感谢既为帮助 – PTGuy 2011-03-10 21:17:35

0

您对报价的使用对我来说似乎有点奇怪。试试这个:

find "$direc{iterdir}" $r_option -iname "*${exten[iterext]}" -exec -rm "{}" ";" 

哦,并用-x选项运行你的shell脚本。这将在执行之前打印每个命令行。

set -x 
find "$direc{iterdir}" $r_option -iname "*${exten[iterext]}" -exec -rm "{}" ";" 
set +x 
+0

他的命令有许多问题不仅仅是引号,请参阅我的答案中的列表。 – SiegeX 2011-03-10 20:59:13

+0

是的,在阅读你的答案后,我注意到了。到目前为止我没有使用数组变量,所以我没有发现那个错误。 – 2011-03-10 21:03:20