忽略查找命令Linux / Unix中的文件列表

时间:2015-11-06 13:03:19

标签: linux unix find ignore

我想忽略find命令中的文件列表: 找 。 \(-name file1 -o -name file2 \) 在上面的格式中,我必须单独提供文件。我可以将它们放入数组中吗?

4 个答案:

答案 0 :(得分: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从第一个文件中排除{Dennis,chepner,Etan,Jonathan,Glenn}会指出,但我还没喝咖啡早晨。

答案 1 :(得分:0)

find支持正则表达式。见How to use regex with find command?。 如果你的文件名有某种模式,这可以解决你的问题。

答案 2 :(得分:0)

Posix扩展正则表达式是一个很好的方法

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

答案 3 :(得分:0)

我在File::Find中使用perl

#!/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" ); 

您可以从文件中读取文件名,也可以内联数组。或者也使用正则表达式测试。