找不到脚本工作,在终端提示符下工作

时间:2011-03-10 20:41:55

标签: linux bash find sh

我正在尝试在linux中运行bash脚本(ubuntu但也有fedora),但是find命令不起作用。

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

现在解释变量: Exten是从文本文件读取的文件扩展名的数组(这里没问题) direc也是从命令行读取的目录数组。 Iterdir和iterext是cicle整数变量。

现在我有两个问题:

1-如果我在脚本中运行它,那么这个find命令不会删除或显示;但是如果我在查找之前放置一个echo并将输出粘贴到命令提示符下找到工作正常。我已经尝试过ubuntu和fedora下的脚本,所以我认为它不是bash配置问题。我应该注意到问题似乎是$ search,因为我用一个硬编码的字符串替换了$ search(比如“* txt”),它在脚本内部工作,所以它似乎是一个报价问题。

2 - 我运行整个find命令并获得find:缺少'-exec'的参数

请帮忙:-(这让我疯了。

2 个答案:

答案 0 :(得分:2)

通过将所有内容放在find命令中开始简单,然后担心参数化。

  1. ${exten[iterext]}应为${exten[$iterext]}
  2. $direc{iterdir}应为${direc[$iterdir]}
  3. exec -rm应为-exec rm
  4. \\\;应为\;
  5. 引用您的变量以防止分词
  6. 由于echo,以下内容将执行干运行。当您对输出感到满意时,只需删除echo即可执行删除。

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

答案 1 :(得分: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