ls egrep 또는 "egrep" 대 "find"를 사용하여 파일을 식별한 후 이동하는 방법

ls egrep 또는 "egrep" 대 "find"를 사용하여 파일을 식별한 후 이동하는 방법

특정 파일 이름 문자열이 있는 모든 이미지를 특정 디렉터리로 이동해야 합니다.

예시 파일 이름입니다.

facility_92+SOURCE1+SOURCE1.0

"facility_" 뒤에는 1~5자리 숫자가 올 수 있습니다.

다음은 이동하려는 파일 목록을 반환합니다.

ls | egrep "facility_([0-9]*)\+SOURCE[0-9]*"

그러나 반환된 항목을 이동하려고 하면 막히게 됩니다. 찾기를 사용하여 일치하는 파일을 이동된 폴더로 이동해 보았습니다.

for f in 'find ./ | ls | egrep "facility_([0-9]*)\+SOURCE[0-9]*"'; do mv $f moved/; done

하지만 mv가 조건을 문자열로 구문 분석할 때 많은 오류가 발생합니다...

"-exec"를 다시 시도했습니다.

find ./ | ls | egrep "facility_([0-9]*)\+SOURCE[0-9]*" -exec mv moved 

하지만 비슷한 오류가 발생합니다 ...

제안해 주셔서 감사합니다. 이 접근 방식을 시도한 것이 잘못 되었습니까? Find에서 동일한 정규식을 수행하는 방법을 알아내야 합니까?

답변1

그리고 find당신은해야아니요파이프를 통해 명령을 연결합니다.

-regex파일 이름과 일치하는 문자열을 전달할 수 있는 멋진 플래그가 있습니다 .

find . -regextype egrep -regex ".*facility_([0-9]*)\+SOURCE[0-9]*.*" -exec mv {} DIRECTORY \;

마지막으로 \;일치하는 각 파일 이름을 대체 파일 mv{}.

보시다시피 정규식 .*의 시작과 끝 부분에 사용해야 합니다.find모두자취:

-regex pattern
       File name matches regular expression pattern.  This is a match on the whole path, not a search. For  example, to  match  a  file named './fubar3', you can use the regular expression '.*bar.' or '.*b.*3', but not 'f.*r3'.

관련 정보