用于克隆文件的bash shell脚本

时间:2018-03-20 21:41:07

标签: bash shell unix cloning

cd /home/foo/

for f in `seq -w 01 10`
   do
   cat $f > /home/foo/cloned_files/"$f".$i
done

情况: 我在/ home / foo中只有一个文件。 我想克隆该文件10次,并将迭代次数添加到文件名中。最后,我应该有10个内容相同的文件,但后缀表示其序列号。

示例: /home/foo/xfile.txt

执行脚本后,我应该:  / home / foo / cloned_files /

中的xfile.txt.01,xfile.txt.02,xfile.txt.03 ... xfile.txt.10

任何帮助将不胜感激。谢谢

2 个答案:

答案 0 :(得分:4)

尝试使用标记的规范方法:纯

for i in {01..10}; do
    cp "filename" "/path/to/xfile.txt.$i"
done

如果您需要整数范围是动态的:

integer=10 # <= variable
for i in $(seq -w 1 $integer); do
    cp "filename" "/path/to/xfile.txt.$i"
done

就像@Charles Duffy在评论中所说,一个更便携的解决方案(seq不是bash相关的,它是一个外部命令):

for ((i=1; i<=10; i++)); do
    printf -v num '%02d' "$i"
    cp "filename" "/path/to/xfile.txt.$num"
done

更进一步:TestsAndConditionals

man cp

  

CP(1)

     

NAME

     

cp - 复制文件和目录

注意:

答案 1 :(得分:2)

使用 GNU Parallel

的另一个选项
parallel --dry-run cp file /elsewhere/file.{} ::: {01..10}

示例输出

cp file /elsewhere/file.07
cp file /elsewhere/file.08
cp file /elsewhere/file.09
cp file /elsewhere/file.06
cp file /elsewhere/file.05
cp file /elsewhere/file.04
cp file /elsewhere/file.03
cp file /elsewhere/file.02
cp file /elsewhere/file.01
cp file /elsewhere/file.10

如果输出看起来不错,请删除--dry-run并再次运行命令以实际执行此操作。