如何生成 100 个格式为Test1YYYYMMDDHHMM1.txt
, Test1YYYYMMDDHHMM2.txt
, Test1YYYYMMDDHHMM3.txt
, ...,的文件Test1YYYYMMDDHHMM100.txt
?该文件被写入 shell 脚本中可变的目录中。
答案1
要可移植地创建所需的文件,并假设应该YYYYMMDDHHMM
是当前的年、月、日、小时和分钟,您可以在 shell 中使用循环:
#!/bin/sh
destdir=${1:-.}
cd "$destdir" || exit 1
now=$( date +%Y%m%d%H%M )
i=0
while [ "$i" -lt 100 ]; do
i=$(( i + 1 ))
touch "Test1$now$i.txt"
done
会将cd "$destdir" || exit 1
当前目录更改为任何目录路径$destdir
引用的目录,或者终止脚本(如果不可能)。该destdir
变量从脚本命令行上的第一个参数获取其值,或者,如果未给出参数,则将为.
,即当前目录。要在其中创建文件,~/somedir
您可以将此脚本作为./script ~/somedir
.
首先将 的值设置now
为您需要的时间戳的字符串表示形式。然后它循环 100 次并使用该touch
命令以及时间戳和计数器变量创建文件i
。
在bash
shell 中,您可能希望使用大括号扩展来替换上面的循环。只要生成命令行的总长度不太长,这是可行的。如果它变得太长(对于 100 个文件来说就不会出现这种情况),您将收到“参数列表太长”错误,并且您将不得不诉诸类似于上面的循环的方法。
您还可以将特殊格式字符串与中%(...)T
的内置实用程序一起使用,而不是调用该实用程序。这需要4.2 或更高版本。printf
bash
date
bash
#!/bin/bash
destdir=${1:-.}
cd "$destdir" || exit 1
printf -v now '%(%Y%m%d%H%M)T' -1
touch "Test1$now"{1..100}.txt
如果您需要创建数千文件,上面的代码不允许你这样做,如果你真的不喜欢循环(或者就像编写不可读且无法维护的代码),那么该xargs
命令可能会对您有所帮助:
#!/bin/bash
destdir=${1:-.}
cd "$destdir" || exit 1
printf -v now '%(%Y%m%d%H%M)T' -1
printf 'Test1%s.txt\n' "$now"{1..100} | xargs touch
这将调用touch
实用程序 via xargs
,该实用程序将从中读取参数printf
并以可管理的批次(而不是一次全部)创建文件。由于是内置实用程序,printf
因此使用所有文件名调用该实用程序不会有任何问题。printf
在zsh
shell 中,如果你想与众不同,你可能会做类似的事情
#!/bin/zsh
destdir=${1:-.}
cd $destdir || exit 1
zmodload zsh/datetime
strftime -s now %Y%m%d%H%M
i=0
repeat 100 touch Test1$now$((++i)).txt
显然,您也可以使用普通的大括号扩展zsh
,但上面显示了如何使用zsh
srepeat
循环的简化变体。
答案2
mkdir Test1$(date +%Y%m%d%H%M){1..100}
touch Test1$(date +%Y%m%d%H%M){1..100}.txt
这将创建 100 个目录,请参阅手册页了解日期,并检查 bash 中的大括号扩展。这些是你在这里工作的东西。
该touch
命令将执行相同的操作,但会创建文件。
这些想法可以在 bash 中的各种命令中使用,并以各种方式发挥作用,您应该真正花时间学习和理解