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