특정 파일 이름 문자열이 있는 모든 이미지를 특정 디렉터리로 이동해야 합니다.
예시 파일 이름입니다.
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'.