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
.