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

У меня есть единственный файл (PDF), и я хочу иметь много идентичных копий в той же папке (200, было бы хорошо), названный file-001, file-002 и т.д.

Как я делаю это?

12
задан 27 August 2014 в 12:55

4 ответа

Вы могли сделать что-то как

< file tee file-{001..200}

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

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

< file > /dev/null tee file-{001..200}
21
ответ дан 16 November 2019 в 14:17

Это - классический случай, где приемы оболочки помогают много.

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

21
ответ дан 16 November 2019 в 14:17

Для создания единственного дубликата файла, Вы, вероятно, знаете, что можно использовать 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 для большего количества информации

7
ответ дан 16 November 2019 в 14:17

Как всегда, грузовик Python прибывает поздно, но:

сделайте это исполняемым файлом, перетащите его по окну терминала, перетащите файл, чтобы скопировать по окну терминала и определить номер копий:

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)
4
ответ дан 16 November 2019 в 14:17

Другие вопросы по тегам:

Похожие вопросы: