2015-11-06 74 views
0

文件列表,我想忽略来自find命令文件的列表:忽略查找命令的Linux/Unix

find . \(-name file1-o -name file2 \) 

在上面的格式,我必须单独给文件。我可以将它们放入数组吗?

回答

1

要回答你的问题,不,你不能把文件忽略到一个数组中,并期望有find知道它们。一个数组是你的shell的工件(我认为是bash),而find工具是一个单独的二进制文件,在你的shell之外。

也就是说,您可以使用数组来生成查找选项。

#!/usr/bin/env bash 

a=(file1 file2 file3) 

declare -a fopt=() 
for f in "${a[@]}"; do 
    if [ "${#fopt[@]}" -eq 0 ]; then 
    fopt+=("-name '$f'") 
    else 
    fopt+=("-o -name '$f'") 
    fi 
done 

echo "find . -not (${fopt[@]})" 

毫无疑问,一个更优雅的方式,从第一个文件处理的-o排除发现{丹尼斯,chepner,伊坦,乔纳森,格伦}会指出,但我还没有喝咖啡还没有这早上。

+0

感谢您的快速响应,将此添加到我现有的脚本更容易 – waiting

0

POSIX扩展正则表达式是要走

find . -regextype posix-extended -regex '.*(scriptA|scriptB)[0-9]\.pl' 
0

一个很好的方式,我会在perl使用File::Find

#!/usr/bin/env perl 
use strict; 
use warnings; 

use File::Find; 

my @skip_names = qw(skip_this_file.txt 
        not_this_either 
        ); 
my %skip = map { $_ => 1 } @skip_names; 


sub finder { 
    next if $skip{$_}; 
    ## do everything else. 
} 

find (\&finder, "/path/to/find_in"); 

你可以阅读您的文件名出的文件,或内联数组。或者使用正则表达式测试。