如何使用linux`find`命令搜索一组文件?

时间:2019-07-19 08:18:12

标签: bash

我在某个目录中有一组文件。现在,我想在两个不同的目录中搜索它们。我使用了以下代码:

(jumped to the directory that contains that group of files)
ls | while read name; do find ~/dir1 ~/dir2 -name {$name};done

但是我想这太慢了,因为对于每个文件,dir1dir2应该被搜索一次。因此搜索将进行太多次。

我的猜测对吗?如果是这样,我应该怎么写?

1 个答案:

答案 0 :(得分:2)

find支持-o进行OR操作。

您可以使用此:

files=(); # Initialize an empty bash array
for i in *; do files+=(-o -name "$i"); done # Add names of all the files to the array
find dir1/ dir2/ -type f '(' "${files[@]:1}" ')' # Search for those files

例如,考虑这种情况:

$ touch a b c
$ ls
a b c
$ files=()
$ for i in *; do files+=(-o -name "$i"); done
$ printf '%s ' "${files[@]}"; echo
-o -name a -o -name b -o -name c 
$ printf '%s ' "${files[@]:1}"; echo
-name a -o -name b -o -name c 
$ printf '%s ' find dir1/ dir2/ -type f '(' "${files[@]:1}" ')'; echo
find dir1/ dir2/ -type f ( -name a -o -name b -o -name c )  # This is the command that actually runs.