검색 내용을 다른 디렉토리로 이동

검색 내용을 다른 디렉토리로 이동

저는 Oracle Solaris를 사용하고 있습니다.

나는 다음을 사용하고 있습니다 :

grep "searchstring" filename.*

위 명령은 내 검색 결과를 반환합니다.

이제 위 검색 결과의 모든 파일(검색 결과가 아닌 모든 파일)을 특정 디렉터리로 이동하고 싶습니다 ../mydir/.

이 작업을 하나의 명령으로 어떻게 수행할 수 있습니까? 검색과 이동은 모두 한 줄 명령으로 수행되어야 합니다.

답변1

ksh, bash또는 에서 파일 이름에 줄 바꿈 문자가 포함되어 있지 않다고 가정하면 ( 의 /usr/xpg4/bin/sh출력에 Split+glob 연산자를 사용할 수 있습니다.grep -l-l일치하는 파일이 아닙니다).

해당 연산자는 다음을 떠나 호출됩니다.명령 대체( `...`또는 $(...)) 인용되지 않았습니다. 여기서는 $IFS분할할 문자(여기서는 개행 문자)를 지정하기 위해 특수 변수를 사용하고 다음을 사용하여 해당 glob부분을 비활성화하여 조정합니다 set -f.

IFS='
'
set -f
mv $(set +f; grep -l searchstring filename*) ../mydir/

(글로빙을 복원한다내부에filename*확장 을 위한 명령 대체(서브쉘에서 실행)

다음과 같이 단순화할 수 있습니다.

mv $(grep -l searchstring filename*) ../mydir/

파일 이름에 공백, 탭, 줄 바꿈, 또는 문자가 포함되어 있지 않다는 것을 알고 *있는 ?경우 [. 위의 분할은 줄 바꿈, 공백 및 탭 문자(기본값 $IFS)에 대해 수행되며 해당 분할의 결과인 각 단어에 대해 글로빙이 수행됩니다(그러나 파일 이름에 와일드카드 문자가 포함되어 있지 않으면 문제가 되지 않습니다).

파일 이름에 개행 문자가 포함되지 않는다고 보장할 수 없다면 대신 루프를 사용할 수 있습니다.

for f in filename*; do
  grep -q searchstring "$f" && mv "$f" ../mydir/
done

관련 정보