명령줄을 사용하여 단일 파일의 여러 복사본을 만드는 대체 솔루션은 무엇입니까?

명령줄을 사용하여 단일 파일의 여러 복사본을 만드는 대체 솔루션은 무엇입니까?

1개 파일을 10개 파일로 복사하려고 합니다. 예를 들어, 이라는 이메일이 있습니다 test1.eml. 동일한 파일의 복사본을 10개 원합니다.

인터넷에서 검색하던 중 이 stackoverflow 스레드를 발견했습니다.https://stackoverflow.com/questions/9550540/linux-commands-to-copy-one-file-to-many-files그리고 커뮤니티 회원 중 한 명이 "knittl"이라고 언급한 평가 명령을 따르세요.

eval 'cp test1.eml 'test{2..10}.eml';'

위에서 언급한 명령은 작동하며 내 요구 사항을 충족합니다. eval 명령을 언급한 사람이 나에게 더러운 해킹이라고 말했기 때문에 이를 달성하기 위한 대안/더 우아한 명령이 있습니까?

답변1

나는 비슷한 일을 할 것이지만 for i in {2..10}; do cp test1.eml test$i.eml; done
거의 같은 일을 할 것입니다.

답변2

 tee >test2.eml test{3..10}.eml < test1.xml

소스 코드는 한 번만 읽고 하나의 명령만 실행됩니다. 대용량 파일의 경우 더 효율적이지 않을 수 있으며 tee데이터 블록이 각 출력 파일에 차례로 기록되므로 조각화가 발생할 수 있습니다. 또한 cp옵션에 따라 원래 권한을 부분적으로 또는 완전히 복사하는 대신 현재 umask를 기반으로 권한이 있는 파일을 생성합니다 .

입력을 저장하려면 zsh셸을 사용하세요. (그런데 이 {2..10}구문이 여기서 나온 것입니다.)

 for f (test{2..10}.eml)cp test1.eml $f

이것은 당신만큼 짧습니다:

 eval 'cp test1.eml 'test{2..10}.eml';'

그러나 더 문제가 많은 문자가 포함된 파일 이름으로 더 직관적이고 더 명확하고 일반화하기가 더 쉽습니다.

zsh이 옵션을 비활성화하지 않았다면 다음 multios을 수행할 수도 있습니다.

<test1.eml >test{2..10}.eml

거기에서 zsh내부 작업이 수행되고 tee호출되므로 cat해당 방법보다 약간 덜 효율적입니다 tee.

관련 정보