Как скопировать определенный файл несколько раз с обычным окончанием?

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 -это один из таких
ключевых
1
@Rmano Я буду придерживаться, -я думаю: P
Тим

Ответы:

22

Вы могли бы сделать что-то вроде

< file tee file-{001..200}

однако, если носитель станет нечитаемым, не будет иметь значения, сколько на нем копий - в основном резервные копии требуют разнообразия .

Обратите внимание, что teeзаписывает свой стандартный ввод в стандартный вывод, а также в каждый из указанных файлов - для больших файлов или для файлов, содержащих двоичные данные или другие специальные символы, которые могут мешать настройкам вашего терминала, вы, вероятно, захотите сбросить стандартный вывод в ведро с битом

< file > /dev/null tee file-{001..200}
steeldriver
источник
4
tee file-{001..200} < file >/dev/nullвыглядит для меня более разборчиво. Смотрите этот почти повторяющийся ответ: Как скопировать файл в несколько папок в терминале?
Раду Радеану
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

(несколько строк, чтобы помочь читаемости ...)

:-П

Rmano
источник
1
Что если бы я хотел, чтобы каждое простое число было a, _а каждое не простое - -? 1 не простое число, и вы выбираете для 0! : P Анекдоты!
Тим
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)
Якоб Влейм
источник
Да, я раньше пробовал с python, но мне не нравилась неэффектность ... Обычно я делаю python :)
Тим
@Tim Это должен быть шрифт кода на этом сайте, который препятствует привлекательности кода на Python :)
Jacob Vlijm
1
Есть несколько способов сделать это.
Брайам