bash脚本中的通配符扩展

Mor*_*rse 5 bash

如果我在我的脚本中写这个字符串:

list=$(ls /path/to/some/files/*/*/*.dat)
Run Code Online (Sandbox Code Playgroud)

它工作正常.但我需要的是

files="files/*/*/*.dat"
list=$(ls /path/to/some/${files})
Run Code Online (Sandbox Code Playgroud)

它说

ls: /path/to/some/files/*/*/*.dat: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

che*_*ner 14

如果您只收到确实没有匹配.dat文件的消息,请将其添加到您的脚本中:

shopt -s nullglob
Run Code Online (Sandbox Code Playgroud)

如果没有匹配的文件,它将导致glob扩展为空列表,而不是按字面处理.


kev*_*kev 4

尝试这个:

list=$(find /path/to/some/files/ -mindepth 3 -maxdepth 3 -name '*.dat')
Run Code Online (Sandbox Code Playgroud)

  • 使用 find 是一个很好的方法,但是这会构建一个文件名字符串,如果它们包含空格,该字符串就会中断。 (3认同)