xargs 를 활용하여 많을 파일을 move 시에 mv 를 최소한 호출할수 있는 방법이 있을까요?
글쓴이: sinobazio / 작성시간: 목, 2015/06/18 - 3:11오후
하루가 지나면 다른 폴더로 특정 파일을 move 시킵니다.
다만 파일 개수가 많기 때문에 매개변수 리스트가 너무 길어 find 와 xargs 를 써서 아래처럼 구현하려고 합니다.
find PATH1 -type f -name "*.log" | xargs -i mv {} PATH2
물론 실행은 됩니다. 다만 xargs -t 옵션으로 실행되는 것을 보면,
제가 예상했던 find 로 찾은 리스트들을 적절한 크기로 잘라서 mv 인자에 넣어주지는 않고
(가령 mv PATH1/1.log PATH1/2.log .... PATH2) 파일 하나씩 mv 를 호출하더라구요.
find PATH1 -type f -name "*.log" | xargs
=> 여기까지만 하고 echo 로 출력되는 output 은 적당한 길이로 묶인 파일 리스트로 들어오는데 (1.log 2.log ... )
-i 옵션을 주고 mv 를 하려고 하면 각 파일마다 매번 mv 를 호출하고 있네요.
<참고로 -i 옵션 없이 그냥 rm 실행시에는 rm -f PATH/1.log PATH/2.log .... 이렇게 여러 파일 리스트가 달려서 나옵니다> find PATH1 -type f -name "*.log" | xargs -t rm -f
-i 옵션이 원래 파일 하나씩 전달하는것인지, 아니면 제가 애초에 어떤 부분을 잘못알고 있는지요...
Forums:
-i는 -L 1을 가정하기 때문에 그렇습니다.
-i는 -L 1을 가정하기 때문에 그렇습니다.
mv 대신, 따로 script를 만들어 PATH2를 받지 않는 형태로 만들고, xargs에 -i를 빼면 될 것 같네요.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
-t dest_dir 옵션이 있는 mv인지
-t dest_dir 옵션이 있는 mv인지 확인해보시는것도..
아. 그렇군요.. 답변 감사합니다. 많은 도움
아. 그렇군요.. 답변 감사합니다. 많은 도움 되었습니다.
댓글 달기