Belirli bir dosyayı düzenli bir sonla birkaç kez nasıl kopyalayabilirim?


13

Ben tek bir dosya (PDF) var ve aynı klasörde aynı kopya sürü (200 güzel olurdu) adında olmasını istiyorum file-001, file-002vb

Nasıl yaparım?


Hayır, hata düzeltmesi içindir.
Tim

_ Umarım bir yazım hatasıdır?
Rinzwind

@Rinzwind evet! ilginç olabilir - her biri için rastgele bir karakter seçer misin? : p
Tim

@Tim: Rastgele bir "_" veya "-" oluşturmak için şunları yapabilirsiniz printf "%s\n" "$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )":-P (ve bu solucanlardan echo -biri olduğu için uyarılmalıdır, çünkü bu köşe vakalarından biridir ...)
Rmano

1
@Rmano Bence sopa -: P
Tim

Yanıtlar:


22

Gibi bir şey yapabilirdin

< file tee file-{001..200}

ancak ortam okunamaz hale gelirse üzerinde kaç kopya olduğu fark etmez - temel olarak yedeklemeler çeşitlilik gerektirir .

Not teeyanı sıra verilen dosyaların her biri için standart çıkışa Standart girişini yazar - Büyük dosyalar için veya terminal ayarlarına müdahale edebilir ikili veri veya diğer özel karakterleri içeren dosyalar için, size standart çıkış dökümü istiyorum muhtemelen olacaktır bit kovası

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

4
tee file-{001..200} < file >/dev/nullbeni daha okunaklı bir şekilde arıyor. Bu neredeyse yinelenen cevaba bakın: Terminal'deki bir dosyayı birden fazla klasöre nasıl kopyalayabilirim?
Radu Rădeanu

21

Bu, kabuk hilelerinin çok yardımcı olduğu klasik durum.

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

Ve bunun bir şaka olduğunu biliyorum , ama rastgele _veya -numarayı addan ayırmak istiyorsanız kullanabilirsiniz:

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

(okunabilirliğe yardımcı olmak için birden fazla satır ...)

:-P


1
Her asal sayının bir asal sayı olmamasını _ve her asal olmayan olmasını istersem ne olur -? 1 asal değildir ve 0'ı seçersiniz! : P Şakalar!
Tim

7

Bir dosyanın tek bir kopyasını yapmak için kullanabileceğinizi biliyorsunuzdur cp:

cp file file-001

Şimdi, birleştirebilirsiniz, bir dosyaya daha fazla kopya yapmak cpile xargs. Senin durumunda:

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

kopyalar fileiçin file-001, file-002, ..., file-200. Daha man xargsfazla bilgi için bakınız .


4

Her zaman olduğu gibi, piton kamyonu geç gelir, ancak:

çalıştırılabilir yapın, bir terminal penceresinin üzerine sürükleyin, terminal penceresinin üzerine kopyalamak için dosyayı sürükleyin ve kopya sayısını ayarlayın:

script file number_ofcopies

Baştaki sıfırların sayısı otomatik olarak ayarlanır, dosyalar adlandırılır file_001.pdf, uzantılar uzantıdan öncefile_002.pdf yerleştirilir .

Senaryo:

#!/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)

Evet, daha önce python ile denedim, ama beceriksizliği sevmedim ... Genellikle python'a giderim :)
Tim

@Tim Bu sitedeki kodun python kodunun güzelliğini engelleyen yazı tipi olması gerekir :)
Jacob Vlijm

1
Bunu yapmanın birkaç yolu vardır.
Braiam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.