使用shell变量查找具有多个文件名的-name

rin*_*rer 3 bash shell find

我有一个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吗?

lun*_*chs 6

看起来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)