将包含两个特定字符串的文件列表到 bash 中的数组中

list files containing two specific strings into an array in bash

在一个目录中(没有任何子目录)我有几个文本文件。

我想创建一个包含文件列表的数组,其中包含特定的两个字符串 Started uploadingUPLOAD COMPLETE

for i /directory_path/*.txt; do
  #perform operations on 1
done

这是考虑目录中存在的所有文本文件。 在这里,在 i 中,我只想要包含上述字符串的文件。

任何 suggestion/help 都将得到批准!

如果您继续使用您的代码,那么可以做到这一点

declare -a files; 
for i in directory_path/*.txt; do
   if grep -q 'Started Uploading' "$i" && grep -q 'UPLOAD COMPLETE' "$i"; then
       files+=("$i")
   fi 
done

echo "matching files: ${files[@]}"

如前所述,grep -l 可以为您提供包含匹配短语的文件列表。使用 IFS,您可以将该列表直接从 grep 读取到数组中:

#! /usr/bin/env bssh

OLD_IFS=$IFS
IFS=$'\n'

declare -a array=( $(grep -l 'Started uploading\|UPLOAD COMPLETE' "dir"/*) )

IFS=$OLD_IFS

echo "count: ${#array[@]}"
printf "    %s\n" "${array[@]}"

你必须save/restore IFS