我有一大堆文件,64,000,我想创建一个使用
列出文件名的Bash脚本ls -1 > file.txt
每4,000个文件,并将生成的file.txt存储在单独的文件夹中。因此,每4000个文件的名称都列在存储在文件夹中的文本文件中。结果是
folder01包含列出文件#0-#4000
的file.txtfolder02包含列出文件#4001-#8000
的file.txtfolder03包含列出文件#8001-#12000
的file.txt
folder16包含列出文件#60000-#64000
的file.txt非常感谢您提前
答案 0 :(得分:5)
你可以尝试
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
答案 1 :(得分:2)
这会让你非常接近;
ls -1 | split -l 4000 -d - folder
运行ls
到split
的结果,使用数字后缀(-l 4000
)从标准输入({{1})中断每4000行(-d
) })并使用-
开始命名文件。
folder
,folder00
,...
答案 2 :(得分:0)
这是使用awk
:
ls -1 | awk '
(NR-1) % 4000 == 0 {
dir = sprintf("folder%02d", ++nr)
system("mkdir -p " dir);
}
{ print >> dir "/file.txt"} '
答案 3 :(得分:0)
上面已经有了一些很好的答案,但我还建议您查看watch
命令。这将每n秒重新运行一次命令,因此您可以观察输出。