如何使用 find、ls 命令根据数组中的条目显示文件名?

How to use find, ls commands to display file names based on entries in an array?

我有一个数组,其中包含可能存在于目录中的 wildcards/filenames。如何显示目录中的文件,其名称与数组中的名称匹配。顺便说一句,如果可能的话,不使用for循环。

例如:

find ./ -maxdepth 1 -type f -name $FILE_ARR[@]

ls $FILE_ARR[@]

访问数组时正确的语法是使用花括号:

ls ${file_array[@]}

对于find,它有点复杂,因为-name只接受一个参数,而不是多个。

find . -maxdepth 1 -name $(echo ${file_array[@]}| sed 's/ / -o -name /g')

请注意,如果任何路径包含空格,它将不起作用。

前提是文件名模式不包含白色space:

 echo ${arr[@]}|fmt -w 1|xargs -i -r -n 1 find ./ -maxdepth 1 -type f -name 

fmt 将输入分成单独的行,xargs 将模式分发给单独的查找命令。

不过,我认为显式循环更易于阅读且更可靠。

对于 find 这是一个处理任意文件名和 find

的其他选项的解决方案
#!/bin/bash

# dummy -name patterns for find
file_array=(
  *.jpg
  *.png
)

# construct find options array
find_options=( \( )
for ((i=0; i<${#file_array}; i++)); do
  [[ $i -gt 0 ]] && find_options+=( -o )
  find_options+=( -name "${file_array[$i]}" )
done
find_options+=( \) )

find . -maxdepth 1 "${find_options[@]}"