如何多次复制某个文件并使其具有常规结尾?

如何多次复制某个文件并使其具有常规结尾?

我有一个文件(PDF),我想在同一个文件夹中拥有许多相同的副本(200个就好了),命名为file-001file-002等等。

我该怎么做?

答案1

你可以做类似的事情

< file tee file-{001..200}

然而,如果介质无法读取,无论它上面有多少份副本都无济于事——从根本上来说,备份需要多样性

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

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

答案2

这是一个经典的案例,表明 shell tr​​icks 有很大帮助。

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

答案3

要创建文件的单个副本,您可能知道可以使用cp

cp file file-001

现在,要对文件进行更多复制,您可以结合cp使用xargs。在您的例子中:

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

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

答案4

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

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

script file number_ofcopies

前导零的数量是自动设置的,文件被命名为file_001.pdffile_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)

相关内容