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任何帮助将不胜感激。谢谢
答案 0 :(得分:4)
尝试使用标记的规范方法:纯bash:
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 - 复制文件和目录
`
,我们建议改为使用$( )
学习如何正确引用,它在shell中非常重要:
&#34;双引号&#34;每个包含空格/元字符和每个扩展的文字:
"$var"
,"$(command "$var")"
,"${array[@]}"
,"a & b"
。使用'single quotes'
代码或文字$'s: 'Costs $5 US'
,ssh host 'echo "$HOSTNAME"'
。见
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words
答案 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
并再次运行命令以实际执行此操作。