find 命令中的变量设置为 bash 中的新变量

find 命令中的变量设置为 bash 中的新变量

是否可以做这样的事情:

inputNum="$1"

files=($(find /dir/to/check -mtime $inputNum))

基本上,我的想法是,我可以使用输入参数来设置查找文件的天数并将其设置为变量数组。我不确定在 bash 中可读的语法。

答案1

的输出find不能可靠地进行后处理,除非您使用-print0代替-print-print在未指定操作时隐含)。

要对输出进行后处理find -print0并将文件路径存储在数组中:

对于 bash4.4+:

readarray -td '' files < <(find /dir/to/check -mtime "$inputNum" -print0)

对于旧版本:

files=()
while IFS= read -rd '' file; do
  files=("${files[@]}" "$file")
done < <(find /dir/to/check -mtime "$inputNum" -print0)

更一般地说,您需要阅读以下建议:为什么循环查找的输出是不好的做法?

答案2

如果你可以使用桀骜而不是bash,那就容易多了。 Zsh 可以根据文件的属性来匹配文件全局限定符

files=(/dir/to/check/**/*(Dm$inputNum))

**/*递归搜索子目录。后面的括号*包含 glob 限定符:D包含点文件,并m根据文件的修改时间(以天为单位)来匹配文件find -mtime(您也可以选择不同的单位并限制时间,例如,(Dmm-$min)类似于find -mmin -$min)。

Zsh 已预装在 macOS 上。在大多数其他 UNIX 系统(特别是大多数 Linux 发行版)上,它作为软件包提供,但默认情况下不安装。

相关内容