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

标签 bash shell file find

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

 declare -a arr=("pdf" "doc" "txt")

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

find $i -type f -print0 | while read -d $'\0' file; do
    echo $file;
    #Process file
done

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

最佳答案

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

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

... -name '*.pdf' -o -name '*.doc' -o -name '*.txt' ...

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

arr=(pdf doc txt)

findargs=()

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

find . -type f \( "${findargs[@]}" -false \)

关于bash - 使用 shell 脚本查找特定文件类型的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45247933/

相关文章:

bash - 如果 bash 中多个条件成立,则输入 if 语句

bash - 使用 WGET 模拟 Web 事件

linux - 如何使用存在于根目录中的所有目录下的特定文件夹中的 shell 脚本列出所有文件?

shell - 在 shell 中, “2>&1 &” 是什么?

C++ 通过参数写入文件或控制台

bash - 如何制作一个 cronjobbable 脚本来计时上传?

linux - 哪个 cygwin 包获取 `parallel` 命令?

postgresql - postgres 备份脚本不是 postgres 用户

android - 可以将 FileOutputStream 转换为字节数组吗?

c - 性能 - 在 C 中逐行读取巨大的 FASTA 文件