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
根据我的理解,您有一个包含目录列表的文件。您想要所有文件:
- 位于文件内容包含的列表中的目录内
(NODES_'TASK')
- 位于列表中文件名包含
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 特定的功能来按换行符分割文件列表)