如何多次复制具有规则结尾的特定文件?


13

我只有一个文件(PDF),并且我想在同一个文件夹中有很多相同的副本(最好是200个)file-001file-002等等。

我该怎么做?


不,它用于纠错。
蒂姆(Tim)

_是我的错字了吗?
Rinzwind 2014年

@Rinzwind是的!可能很有趣-为每个选择一个随机字符?:p
蒂姆(Tim)

@Tim:好吧,要生成一个随机的“ _”或“-”,您可以printf "%s\n" "$(cat /dev/urandom | tr -dc '_-' | fold -w 1 | head -n 1 )":-P(并警告说这是echo -
一罐

1
@Rmano我会坚持-:P
蒂姆(Tim)

Answers:


22

你可以做类似的事情

< file tee file-{001..200}

但是,如果介质变得无法读取,则介质上有多少个副本都没关系-从根本上说备份需要多样性

请注意,tee将其标准输入写入标准输出以及每个给定文件-对于大型文件,或对于包含二进制数据或其他可能干扰终端设置的特殊字符的文件,您可能希望将标准输出转储到钻头桶

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

4
tee file-{001..200} < file >/dev/null更清楚地寻找我。看到这个几乎重复的答案:如何在终端中将文件复制到多个文件夹?
RaduRădeanu2014年

21

这是shell技巧大有帮助的经典案例。

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


1
如果我希望每个质数都为a _而每个非质数都为该-怎么办?1不是质数,您选择0!:P开玩笑!
蒂姆(Tim)

7

要复制一个文件,您可能知道可以使用cp

cp file file-001

现在,要对文件进行更多复制,可以cp与结合使用xargs。在您的情况下:

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

将复制filefile-001file-002,... file-200。请参阅man xargs以获取更多信息。


4

与往常一样,python卡车来晚了,但是:

将其设置为可执行文件,将其拖动到终端窗口上,将文件拖动到终端窗口上进行复制,并设置副本数:

script file number_ofcopies

前导零的数目是自动设置的,文件名为file_001.pdf,文件file_002.pdf编号位于扩展名之前

剧本:

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

@Tim必须是此站点上代码的字体,这会妨碍python代码的美观:)
Jacob Vlijm 2014年

1
有几种方法可以做到这一点。
Braiam
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.