find
如果您的搜索条件足够简单,您可以直接使用 bash而不是使用。例如,
for file in *; do
processFiles "$file"
done
processFiles
将对当前目录的所有文件和目录(隐藏文件除外)执行该函数,参数为每个文件和目录的名称。如果您需要将它递归地应用于所有文件、目录和子目录(隐藏的除外),请使用 globstar shell 选项:
#!/bin/bash
shopt -s globstar
shopt -s nullglob
updates=0
processFiles() {
((++updates))
}
for file in **; do
processFiles "$file"
done
echo "$updates"
如果您只需要文件而不需要目录,请将其插入 for 循环:
[[ -f "$file" ]] || continue
file
如果不是文件(即,如果它是其他东西,比如目录),它将继续循环。
要仅匹配通过扩展变量获得的目录中的文件path
,请编写您的 for 循环:
for file in "$path"/*; do
(或者"$path"/**
如果您使用 globstar 并想要递归)。
如果您需要更复杂的搜索条件,您可以随时使用extglob
option。如果您还需要包含隐藏文件,请使用该dotglob
选项。
您可以在参考手册中找到有关 bash 的更多信息,尤其是以下部分:
最后一点:如果你真的不喜欢这个 100% bash 解决方案,并且如果你仍然想在你的 OP 中沿着脚本做一些事情,那么不要使用 bash 变量,而是使用(临时)文件来存储您需要从一个进程传递到另一个进程的值。这是一种廉价的 IPC 方法,效果很好,但更难以安全实施。