검색 콘텐츠를 다른 디렉터리로 이동

검색 콘텐츠를 다른 디렉터리로 이동

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

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

grep "searchstring" filename.*

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

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

이 작업을 하나의 명령으로 어떻게 수행할 수 있습니까(검색과 이동 모두 한 줄 명령으로 수행해야 함).

답변1

ksh, bash또는 에서 /usr/xpg4/bin/sh파일 이름에 개행 문자가 포함되어 있지 않다고 가정하면 ( grep -l의 출력에 Split+glob 연산자를 사용할 수 있습니다.-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

관련 정보