find command fusses on -exec arg

前端 未结 1 1990
长情又很酷
长情又很酷 2020-12-22 11:16

I am trying to build and run a find command from a script. But I get a very cryptic error message from find. The following basically sums up how I

相关标签:
1条回答
  • 2020-12-22 11:34

    Trying to store complicated commands in bash variables and then evaluate the variables pretty well never works.

    If you need to build a command in pieces, use an array. See this useful Bash FAQ: I'm trying to put a command in a variable, but the complex cases always fail!.

    Here's the basic strategy:

    # Make an array
    declare -a findcmd=(find .)
    # Add some arguments
    findcmd+=(-name 'p*')
    findcmd+=(-mmin +10)
    findcmd+=(-exec echo {} \;)
    # Run the command
    "${findcmd[@]}"
    

    You need to understand how bash quoting works. Remember that the quoting (and de-quoting) only happens once, when you type the command (or when bash reads it from a script file). Quotes which get into the values of variables are just ordinary characters.

    If you're experimenting with set -x, remember also that set -x inserts quotes in order to remove ambiguities. These quotes are not part of the variables. While that is clearly essential, it seems to be confusing to programmers who are not familiar with the bash execution model.

    0 讨论(0)
提交回复
热议问题