파일 목록에서 얻은 여러 디렉터리에서 파일을 찾으시겠습니까?

파일 목록에서 얻은 여러 디렉터리에서 파일을 찾으시겠습니까?
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 관련 기능을 사용하고 있습니다.)

관련 정보