使用 shell 脚本查找特定文件类型的文件

tom*_*tom 3 bash shell file find

我需要递归遍历目录中某些文件类型的所有文件。文件类型是一个数组变量,其中包含我们需要处理的文件类型列表。数组值实际上是动态填充的。为了简单起见,我声明了一个静态数组。

 declare -a arr=("pdf" "doc" "txt")
Run Code Online (Sandbox Code Playgroud)

我有以下代码递归列出目录中的所有文件,但我无法弄清楚如何包含数组“arr”以仅取回包含在数组中的那些文件类型。

find $i -type f -print0 | while read -d $'\0' file; do
    echo $file;
    #Process file
done
Run Code Online (Sandbox Code Playgroud)

请帮我修改代码,以便我只能检索指定的文件类型而不是所有文件。

Sto*_*ica 5

我假设文件类型“pdf”、“doc”、“txt”是指带有这些扩展名的文件名。

如果文件类型的数量相当少(少于几十个),那么您可以构建一个参数数组以find如下格式传递:

... -name '*.pdf' -o -name '*.doc' -o -name '*.txt' ...
Run Code Online (Sandbox Code Playgroud)

假设文件类型数组不为空,这是一种方法(感谢@mike-holt):

arr=(pdf doc txt)

findargs=()

for t in "${arr[@]}"; do
    findargs+=(-name "*.$t" -o)
done

find . -type f \( "${findargs[@]}" -false \)
Run Code Online (Sandbox Code Playgroud)