r ls list.files 模式大括号扩展通配符不起作用

问题描述

我需要在 R 函数 patternbase::lsbase::list.files 参数中使用大括号展开。例如:

# in terminal
ls
# string1  stringX  stringYZ
ls string{1,X}
# string1  stringX

但是

# in R
list.files()
# "string1"  "stringX"  "stringYZ"
list.files(pattern="string{1,X}")
# error: invalid 'pattern' regular expression
list.files(pattern="string\\{1,X\\}")
# character(0) # i.e. finds nothing
list.files(pattern=glob2rx("string{1,X}"))
# character(0) # i.e. finds nothing

base::ls 也是如此。

非常感谢您的帮助,
克里斯

解决方法

list.files(pattern="^string(1|X)$") 有效(list.files(pattern="string(1|X)") 也是如此)。 谢谢!

,

sh 中类似 filename=log_file-$(date +%Y.%m.%d) touch $filename { who; df -h; ps -aux; } > $log_dir/$filename 的结果,您可以使用:

ls string{1,X}

或者,正如@wiktor-stribiżew 在评论中指出的那样,您可以使用:

list.files(pattern="^string(1|X)$")

要进行完整的字符串匹配,您必须用 list.files(pattern="^string[1X]$") ^ 将模式括起来。感谢 @wiktor-stribiżew 的评论。