【问题标题】:Bash script to list files periodically定期列出文件的 Bash 脚本
【发布时间】:2014-01-08 00:55:26
【问题描述】:

我有大量文件,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

非常感谢您

【问题讨论】:

    标签: linux bash shell loops if-statement


    【解决方案1】:

    你可以试试

    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
    }'
    

    说明:

    • NR是awk中的当前记录号,即:当前行号。
    • NR 在第一行从 1 开始,因此我们减去 1 使得 if 语句对于第一行是正确的
    • system 从 awk 中调用操作系统函数
    • print 本身将当前行打印到标准输出,我们可以使用 >> 将输出重定向(并附加)到文件
    • awk 中所有未初始化的变量都会有一个零值,所以我们不需要在程序开头说j=0

    【讨论】:

    • 很好,对你的脚本如何做一点解释也会很有用。
    • @fedorqui 感谢您的评论,但除非 OP 要求,否则我不希望添加任何解释..
    • 嗯,我喜欢认为答案不是针对 OP,而是针对所有可能进入该站点并看到它的人。所以越了解越好:更多的人可以学习。当然,这是我的意见。
    • @fedorqui 是的,每个人都有权发表自己的意见。就个人而言,我从解释中学习,但我从尝试首先了解自己中学到更多..
    • @Håkon Hægland 很棒的解决方案人。我认为自己对 Linux 很熟悉,所以我同意 fedorqui 的解释,即解释会非常有用。我尝试修改代码以使其从一个目录中提取文件,然后在另一个目录中创建新文件夹及其各自的文本文件,但无法解决。无论如何,很好的解决方案,这就是我需要的。谢谢。
    【解决方案2】:

    这会让你非常接近;

    ls -1 | split -l 4000 -d - folder

    从标准输入 (-) 运行 lssplit 的结果,每 4000 行 (-l 4000) 换行,使用数字后缀 (-d),并开始命名文件folder.

    结果为@​​987654328@、folder01、...

    【讨论】:

      【解决方案3】:

      这里是使用awk 的精确解决方案:

      ls -1 | awk '  
       (NR-1) % 4000 == 0 {            
          dir = sprintf("folder%02d", ++nr)
          system("mkdir -p " dir);            
       }                                      
       { print >> dir "/file.txt"} '
      

      【讨论】:

        【解决方案4】:

        上面已经有了一些不错的答案,但我也建议你看看watch 命令。这将每 n 秒重新运行一次命令,因此您可以观看输出。

        【讨论】:

          猜你喜欢
          • 2022-10-15
          • 1970-01-01
          • 2020-03-22
          • 2010-10-05
          • 1970-01-01
          • 1970-01-01
          • 2013-06-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多