[英]Bash script to list files periodically
我有一组庞大的文件,共64,000个,我想创建一个Bash脚本,该脚本使用以下命令列出文件名:
ls -1 > file.txt
每4,000个文件,并将结果file.txt存储在单独的文件夹中。 因此,每4000个文件的名称都列在存储在文件夹中的文本文件中。 结果是
folder01包含列出文件#0-#4000的file.txt
folder02包含列出文件#4001-#8000的file.txt
folder03包含列出文件#8001-#12000的file.txt
。
。
。
folder16包含列出文件#60000-#64000的file.txt
非常感谢你提前
你可以试试
ls -1 | awk '
{
if (! ((NR-1)%4000)) {
if (j) close(fnn)
fn=sprintf("folder%02d",++j)
system("mkdir "fn)
fnn=fn"/file.txt"
}
print >> fnn
}'
说明:
if
语句为真 system
从awk内调用操作系统功能 print
本身将当前行打印到标准输出,我们可以使用>>
将输出重定向(并附加)到文件 j=0
这会让你非常接近;
ls -1 | split -l 4000 -d - folder
通过split
运行ls
的结果,使用数字后缀( -d
)从标准输入( -
) split
每4000行( -l 4000
),并开始使用folder
命名folder
。
结果在folder00
, folder01
,...
这是使用awk
的精确解决方案:
ls -1 | awk '
(NR-1) % 4000 == 0 {
dir = sprintf("folder%02d", ++nr)
system("mkdir -p " dir);
}
{ print >> dir "/file.txt"} '
上面已经有了一些很好的答案,但我也建议你看一下watch
命令。 这将每n秒重新运行一次命令,因此您可以观察输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.