我有一个find命令,查找名称与-name参数提到的多个模式匹配的文件
find -L . \( -name "SystemOut*.log" -o -name "*.out" -o -name "*.log" -o -name "javacore*.*" \)
Run Code Online (Sandbox Code Playgroud)
这会在命令行中成功找到所需文件.我正在寻找的是在shell脚本中使用此命令并将其与tar命令连接以创建所有日志文件的tar.因此,在脚本中我执行以下操作:
LIST="-name \"SystemOut*.log\" -o -name \"*.out\" -o -name \"*.log\" -o -name \"javacore*.*\" "
find -L . \( ${LIST} \)
Run Code Online (Sandbox Code Playgroud)
这不会打印我要查找的文件.
首先 - 为什么这个脚本不能像命令一样运行?一旦它这样做,我可以用它cpio或类似的方式与它一起制作tar吗?
看起来find无法匹配*来自不带引号的变量的模式.这个语法适用于我(使用bash数组):
LIST=( -name \*.tar.gz )
find . "${LIST[@]}"
Run Code Online (Sandbox Code Playgroud)
您的示例将变为以下内容:
LIST=( -name SystemOut\*.log -o -name \*.out -o -name \*.log -o -name javacore\*.\* )
find -L . \( "${LIST[@]}" \)
Run Code Online (Sandbox Code Playgroud)