如何获取与正则表达式列表匹配的文件列表?

如何获取与正则表达式列表匹配的文件列表?

我想使用正则表达式查看哪些内容未备份。列表如下:https://support.code42.com/CrashPlan/4/Troubleshooting/What_Is_Not_Backing_Up#Admin_Excludes

我试过

$ cat | xargs -L 1 echo find /cygdrive/c/Users/Chloe -regex -name

并粘贴了正则表达式列表,看起来不错。当我删除时echo,它给出了错误

find: paths must precede expression: .*/(?:42|d{8,}).*/(?:cp|~).*

我手动尝试了一行,得到了

$ find /cygdrive/c/Users/Chloe -regex -name .*.part
find: paths must precede expression: .*.part

我也尝试过使用引号

$ find /cygdrive/c/Users/Chloe -regex -name '.*.part'
find: paths must precede expression: .*.part

我也尝试改变顺序

$ find -regex -name '.*.part' /cygdrive/c/Users/Chloe
find: paths must precede expression: .*.part

那么我如何找到与所有这些正则表达式匹配的所有文件?我知道有些命令允许您指定@file参数以从文件中获取命令行选项,但我在手册页中没有看到这一点find

答案1

这有效

$ cat | xargs -L 1 -d \\n find 2>/dev/null /cygdrive/c/Users/Chloe -regex
  • -L 1意味着每个命令每次只处理一个参数find,而不是把这些参数集中到一个巨大的命令行中
  • -d \\n表示使用换行符作为参数分隔符,因为某些输入参数带有空格。您必须使用双反斜杠,这样它才不会被 shell 立即解释。
  • 2>/dev/null防止出现“无法读取目录...”等错误
  • -regex表示使用正则表达式来命名文件名。显然-regex-name是互斥的,尽管我-name之前曾使用过正则表达式。

只需粘贴正则表达式列表,然后按 Enter 和 完成^D

相关内容