Bagaimana cara menyalin file tertentu beberapa kali dengan akhiran reguler?

13

Saya memiliki satu file (PDF) dan saya ingin memiliki banyak salinan identik di folder yang sama (200 akan lebih baik) bernama file-001, file-002dll.

Bagaimana saya melakukannya?

Tim
sumber
Tidak, ini untuk koreksi kesalahan.
Tim
Saya harap ini adalah kesalahan ketik?
Rinzwind
@Rinzwind ya! yang mungkin menarik - pilih karakter acak untuk masing-masing? : p
Tim
@Tim: Nah, untuk menghasilkan acak "_" atau "-" Anda dapat printf "%s\n" "$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )":-P (dan diperingatkan bahwa itu adalah kaleng cacing, karena echo -merupakan salah satu dari kasus sudut ini ...)
Rmano
1
@Rmano Saya akan tetap dengan -saya pikir: P
Tim

Jawaban:

22

Anda bisa melakukan sesuatu seperti

< file tee file-{001..200}

namun jika media menjadi tidak terbaca, tidak masalah berapa banyak salinannya - pencadangan secara mendasar membutuhkan keragaman .

Perhatikan bahwa teemenulis input standarnya ke output standar serta ke masing-masing file yang diberikan - untuk file besar, atau untuk file yang berisi data biner atau karakter khusus lainnya yang dapat mengganggu pengaturan terminal Anda, Anda mungkin ingin membuang output standar ke ember bit

< file > /dev/null tee file-{001..200}
Steeldriver
sumber
4
tee file-{001..200} < file >/dev/nullmencari saya lebih jelas. Lihat jawaban yang hampir duplikat ini: Bagaimana cara menyalin file ke beberapa folder di Terminal?
Radu Rădeanu
21

Ini adalah kasus klasik di mana trik shell banyak membantu.

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

Dan saya tahu ini sebuah lelucon , tetapi jika Anda ingin secara acak _atau -memisahkan nomor dari namanya, Anda dapat menggunakan:

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

(beberapa baris untuk membantu keterbacaan ...)

:-P

Rmano
sumber
1
Bagaimana jika saya ingin setiap bilangan prima menjadi _dan setiap non bilangan prima -? 1 bukan prima, dan Anda memilih untuk 0! : P Jokes!
Tim
7

Untuk membuat satu duplikat file Anda mungkin tahu bahwa Anda dapat menggunakan cp:

cp file file-001

Sekarang, untuk membuat lebih banyak duplikat ke file, Anda dapat menggabungkan cpdengan xargs. Dalam kasus Anda:

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

akan menyalin fileke file-001, file-002, ..., file-200. Lihat man xargsuntuk info lebih lanjut.

Radu Rădeanu
sumber
4

Seperti biasa, truk python datang terlambat, tetapi:

membuatnya dapat dieksekusi, seret ke jendela terminal, seret file untuk menyalin dari jendela terminal dan atur jumlah salinan:

script file number_ofcopies

Jumlah angka nol terkemuka diatur secara otomatis, file-file tersebut bernama file_001.pdf, file_002.pdf, dengan filenumbers ditempatkan sebelum ekstensi.

Naskah:

#!/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)
Yakub Vlijm
sumber
Ya, saya mencoba dengan python sebelumnya, tetapi tidak suka inelegance ... Saya biasanya menggunakan python :)
Tim
@ Tim Itu pasti font kode di situs ini yang menghalangi ketegaran kode python :)
Jacob Vlijm
1
Ada beberapa cara untuk membuatnya.
Braiam