【发布时间】:2018-03-20 21:41:07
【问题描述】:
cd /home/foo/
for f in `seq -w 01 10`
do
cat $f > /home/foo/cloned_files/"$f".$i
done
情况: 我在/home/foo 中只有 1 个文件。 我想克隆该文件 10 次并将迭代号添加到文件名中。最后,我应该有 10 个内容相同但后缀表示其序列号的文件。
示例: /home/foo/xfile.txt
执行脚本后,我应该有: xfile.txt.01, xfile.txt.02, xfile.txt.03...xfile.txt.10 在 /home/foo/cloned_files/
任何帮助将不胜感激。谢谢
【问题讨论】:
-
你为什么要做
cat和重定向而不是仅仅使用cp? -
seq不是 POSIX 指定的,不是 bash 的一部分,否则不能移植/保证在任何给定系统上具有任何特定行为,即使该系统已知运行 bash。做类似for ((f=1; f<=10; f++)); do printf -v num '%02d' "$f"; echo "Number is $num"; done的事情要安全得多 -
总之,看起来你想遍历文件,所以你应该有两个循环,一个循环你的文件,一个循环你的数字:
for filename in *; do [[ -f "$filename" ]] || continue; for (( i=1; i<=10; i++)); do printf -v num '%02d' "$num"; cp "$filename" cloned_files/"$filename.$num"; done; done