从文件中获取文件 globs 并找到这些文件

问题描述

我有一个名为“file.txt”的文件,它包含 globs。内容

*.tex
*.pdf
*C*.png

我需要从文件获取这些扩展名,然后在当前目录中找到包含这些 glob 的文件(最好使用 find,其他的也可以)。

我用过

grep "" file.txt | xargs find . -name 

但我收到此错误

find: paths must precede expression: `*.pdf'

使用 Ubuntu

解决方法

原始代码需要将 -n 1 参数传递给 xargs,以便仅将一个 glob 传递给 find 的每个副本,因为每个 glob 表达式都需要以 -name 开头(并附加到任何其他带有 -name-o 表达式,“或”运算符)。

更有效的是,在构建一个将所有 find 运算符放在一个命令行上的表达式之后,只运行一次 -name,用 -o 分隔。

#!/usr/bin/env bash
#              ^^^^- MUST be run with bash,not /bin/sh

find_expr=( -false )
while IFS= read -r line; do
  find_expr+=( -o -name "$line" )
done <file.txt

find . '(' "${find_expr[@]}" ')' -print