我在某个目录中有一组文件。现在,我想在两个不同的目录中搜索它们。我使用了以下代码:
(jumped to the directory that contains that group of files)
ls | while read name; do find ~/dir1 ~/dir2 -name {$name};done
但是我想这太慢了,因为对于每个文件,dir1
和dir2
应该被搜索一次。因此搜索将进行太多次。
我的猜测对吗?如果是这样,我应该怎么写?
答案 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.