查找从文件列表中获取的多个目录中的文件?

查找从文件列表中获取的多个目录中的文件?
FreeBSD 9.2 RELEASE p2

我有一个文件dirs.txt。此文件中有一个新行分隔的目录列表,如下所示:

/etc
/home
/home/goods/

我需要首先在所有目录中查找名称为“good”或包含字符串“(NODES_'TASK')”的文件,然后将所有这些文件复制到目录中/tmp

我想一定是这样的:

$ find $fromDirs.txt -type f -name 'good' | \
    grep -lr '\(NODES_\'TASK\'\)' $fromDirs.txt | > /tmp

答案1

根据我的理解,您有一个包含目录列表的文件。您想要所有文件:

  1. 位于文件内容包含的列表中的目录内(NODES_'TASK')
  2. 位于列表中文件名包含good.

然后将这些匹配的文件复制到/tmp

IFS=$'\n' read -d '' -r -a dirs < fromDirs.txt
find "${dirs[@]}" -type f \( -name '*good*' -o -exec grep -F "(NODES_'TASK')" {} \; \) -exec cp {} /tmp/ \;

fromDirs.txt将以换行符分隔的方式读取到数组中$dirs
然后find查看这些目录,如果路径中的任何目录包含good,或者文件包含(NODES_'TASK'),则将该文件复制到/tmp

(注意:我在这里使用了一些 bash 特定的功能来按换行符分割文件列表)

相关内容