วิธีการคัดลอกไฟล์ที่แน่นอนหลายครั้งด้วยการสิ้นสุดปกติ?


13

ฉันมีไฟล์เดียว (ไฟล์ PDF) และฉันต้องการที่จะมีจำนวนของสำเนาที่เหมือนกันในโฟลเดอร์เดียวกัน (200 จะดี) ชื่อfile-001, file-002ฯลฯ

ฉันต้องทำอย่างไร?


ไม่มันมีไว้สำหรับการแก้ไขข้อผิดพลาด
ทิม

_ คือตัวพิมพ์ที่ฉันหวัง
Rinzwind

@Rinzwind ใช่! ที่อาจน่าสนใจ - เลือกตัวละครแบบสุ่มสำหรับแต่ละตัว? : p
ทิม

@Tim: ดีในการสร้างแบบสุ่ม "_" หรือ "-" คุณสามารถprintf "%s\n" "$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )":-P (และได้รับคำเตือนว่าเป็นกระป๋องของเวิร์มเพราะecho -เป็นหนึ่งในกรณีมุมนี้ ... )
Rmano

1
@Rmano ฉันจะติดกับ-ฉันคิดว่า: P
ทิม

คำตอบ:


22

คุณสามารถทำสิ่งที่ชอบ

< file tee file-{001..200}

แต่ถ้าสื่อจะกลายเป็นอ่านไม่ได้ก็จะไม่สำคัญว่าหลายเล่มอยู่ในนั้น - พื้นฐานการสำรองข้อมูลที่จำเป็นต้องมีความหลากหลาย

โปรดทราบว่าการteeเขียนอินพุตมาตรฐานไปยังเอาต์พุตมาตรฐานรวมถึงไฟล์ที่กำหนดแต่ละไฟล์ - สำหรับไฟล์ขนาดใหญ่หรือไฟล์ที่มีข้อมูลไบนารี่หรืออักขระพิเศษอื่น ๆ ที่อาจรบกวนการตั้งค่าเทอร์มินัลของคุณ ฝากข้อมูลบิต

< file > /dev/null tee file-{001..200}

4
tee file-{001..200} < file >/dev/nullมองหาฉันอย่างชัดเจนมากขึ้น ดูคำตอบที่เกือบซ้ำกันนี้: วิธีคัดลอกไฟล์ไปยังหลายโฟลเดอร์ใน Terminal ได้อย่างไร
Radu Rădeanu

21

นี่เป็นเคสแบบคลาสสิคที่ลูกเล่นของเชลล์ช่วยได้มาก

for i in {000..199}; do cp file file-$i; done

และฉันรู้ว่ามันเป็นเรื่องตลกแต่ถ้าคุณต้องการสุ่ม _หรือ-แยกตัวเลขออกจากชื่อคุณสามารถใช้:

for i in {000..199}; do 
    cp file file$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )$i; 
done

(หลายบรรทัดเพื่อช่วยให้สามารถอ่านได้ ... )

:-P


1
จะเป็นอย่างไรถ้าฉันต้องการให้ทุกหมายเลขเฉพาะเป็น a _และไม่ใช่ทุกคนที่เป็นนายก-? 1 ไม่ใช่เฉพาะและคุณเลือกเป็น 0! : P Jokes!
ทิม

7

หากต้องการทำซ้ำไฟล์เดียวคุณอาจรู้ว่าคุณสามารถใช้cp:

cp file file-001

ตอนนี้ที่จะทำให้รายการที่ซ้ำกันมากขึ้นไปยังแฟ้มคุณสามารถรวมกับcp xargsในกรณีของคุณ:

echo file-{001..200} | xargs -n 1 cp file

จะคัดลอกfileไปfile-001, file-002, ... file-200, ดูman xargsข้อมูลเพิ่มเติม


4

เช่นเคยรถบรรทุกไพ ธ อนมาสาย แต่:

ทำให้สามารถเรียกใช้งานได้ลากมันไปที่หน้าต่างเทอร์มินัลลากไฟล์เพื่อคัดลอกผ่านหน้าต่างเทอร์มินัลแล้วตั้งจำนวนสำเนา:

script file number_ofcopies

จำนวนศูนย์ชั้นนำที่มีการตั้งค่าโดยอัตโนมัติ, ไฟล์ที่มีการตั้งชื่อfile_001.pdf, file_002.pdfมี filenumbers วางไว้ก่อนส่วนขยาย

บท:

#!/usr/bin/env python3

import sys
import shutil

orig = sys.argv[1]; n = sys.argv[2]; size = len(str(n)); out = (orig[:orig.rfind(".")], orig[orig.rfind("."):])
for item in [out[0]+"_"+(size-len(str(item)))*"0"+str(item)+out[1] for item in range(1, int(n)+1)]:
    shutil.copyfile(orig, item)

ใช่ฉันพยายามกับงูหลามก่อนหน้านี้ แต่ไม่ชอบความไม่ประณีต ... ฉันมักจะไปสำหรับหลาม :)
ทิม

@ Tim มันจะต้องเป็นตัวอักษรของรหัสในเว็บไซต์นี้ที่เป็นอุปสรรคต่อ prettyness รหัสหลาม :)
จาค็อบ Vlijm

1
มีหลายวิธีในการทำสิ่งนี้
Braiam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.