从文件中获取文件 glob 并找到这些文件
Get file globs from a file and find these files
我有一个名为“file.txt”的文件,它包含 glob。内容:
*.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
(并使用“或”运算符 -o
附加到任何其他 -name
表达式。
更有效的方法是 运行 find
一次,在构造一个将所有 -name
运算符放在一个命令行上的表达式之后,用 -o
s 分隔.
#!/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
我有一个名为“file.txt”的文件,它包含 glob。内容:
*.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
(并使用“或”运算符 -o
附加到任何其他 -name
表达式。
更有效的方法是 运行 find
一次,在构造一个将所有 -name
运算符放在一个命令行上的表达式之后,用 -o
s 分隔.
#!/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