【问题标题】:Find files in multiple directories taken from list in a file?从文件中的列表中查找多个目录中的文件?
【发布时间】:2014-09-13 08:00:16
【问题描述】:
FreeBSD 9.2 RELEASE p2

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

/etc
/home
/home/goods/

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

2.sh 文件 chmod +x 是 755 fromDirs.txt 文件 chmod +x 是 755

这段代码给我错误

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

2.sh: cannot open fromDirs.txt : 没有这样的文件或目录

2.sh: ${dirs[...}: 替换错误

但是文件 fromDirs.txt 存在并且 2.sh 从它的分配目录运行,我也尝试提供完整路径而不是 fromDirs.txt 并且错误相同

这段代码给我错误

FILE=fromDirs.txt
IFS='\n'
while read -r dirs
do
find "$dirs" -type f \( -name '*good*' -o -exec grep -F "(NODES_'TASK')" {} \; \) -exec cp {} /tmp/ \;
done < "$FILE"

2.sh: 6: 语法错误:“done”意外(期待“do”)

这段代码也给我错误

FILENAME=fromDirs.txt

awk '{kount++;print  kount, $0}
     END{print "\nTotal " kount " lines read"}' $FILENAME

2.sh: : not found awk: can't open file fromDirs.txt source line number 2

那么如何逐行读取文件并做我需要的?

【问题讨论】:

  • 试试bash,而不是sh
  • 尝试使用 ksh,或 dbl 检查您的 PATH 环境。我没有使用 FreeBSD 的经验,但很难想象 bashksh 不可用。祝你好运。

标签: linux unix grep find freebsd


【解决方案1】:

这对我有用

 for line in "`cat fromDirs.txt`"; do find "$line" -type f \( -name '*good*' -o -exec grep -F "(NODES_'TASK')" {} \; \) -exec cp {} /tmp/ \;; done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多