Farklı ada sahip bir grup dosyayı kopyalayıp yapıştırın


10

Adında bir sürü metin dosyam var

foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_original.in
...
...
foo_bar_abc_1_1000_geh_original.in

Ben istiyorum kopyalayıp (ve orijinal dosyaları tutmak) her dosya ve yapıştırma gibi (aynı klasörde) farklı isimlere

foo_bar_abc_1_01_geh_copy.in
foo_bar_abc_1_02_geh_copy.in
foo_bar_abc_1_03_geh_copy.in
...
...
foo_bar_abc_1_1000_geh_copy.in

Basit bir komut dosyası kullanarak bunu nasıl yapabilirim?

Yanıtlar:


13

Dizini orijinal dosyalara sahip olduğunuz yere değiştirin.

Ardından aşağıdaki komut satırı ile test edin,

for i in *_original.*;do echo cp -p "$i" "${i/_original./_copy.}";done

ve iyi görünüyorsa echo, kopyalamayı kaldırın ve yapın,

for i in *_original.*;do cp -p "$i" "${i/_original./_copy.}";done

8

Sen kullanabilirsiniz mcpgelen mmvpaketteMmv'yi yükle şu şekilde:

mcp "*original*" "#1copy#2"

Bu, geçerli dizine “orijinal” dizesini içeren her dosyayı kopyalar ve bu dizeyi “kopya” ile değiştirir. Bayrağı mcpekleyerek ne yapacağınızı test edebilirsiniz -n, ancak dosyaların üzerine sessizce yazmaz, ancak size sorar. Kullanmanın mmvavantajı cp, her bir dosya için çağırmanıza gerek kalmamasıdır - kopyaladığınız gibi bin dosya ile fark yaratır.

GNU'yuparallel Paralel yükle aşağıdaki şekilde de kullanabilirsiniz ( --dry-runtest içindir, kopyalamayı gerçekleştirmek için kaldırın):

parallel --dry-run cp -p "{}" "{=s/original/copy/=}" ::: *

veya "Argüman listesi çok uzun" hatası veriyorsa:

printf "%s\0" * | parallel --dry-run -0 cp -p "{}" "{=s/original/copy/=}"

Örnek çalışma

$ ls -1
foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_original.in
foo_bar_abc_1_04_geh_original.in
$ mcp "*original*" "#1copy#2"
$ ls -1
foo_bar_abc_1_01_geh_copy.in
foo_bar_abc_1_01_geh_original.in
foo_bar_abc_1_02_geh_copy.in
foo_bar_abc_1_02_geh_original.in
foo_bar_abc_1_03_geh_copy.in
foo_bar_abc_1_03_geh_original.in
foo_bar_abc_1_04_geh_copy.in
foo_bar_abc_1_04_geh_original.in

Let var timebir 100 KiB her 1000 dosyaları üzerinde çalışacak, bunu yavaş makinede:

$ time mcp "*original*" "#1copy#2"
real    0m1.114s
user    0m0.000s
sys     0m0.132s
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.