一次计算目录中的文件

时间:2014-12-08 07:42:33

标签: ruby linux bash

我使用macOSx,我想计算目录中的所有文件,然后打印按上次修改时间排序的结果。 像这样:

1241 2014-12-08 07:00:00 +0700
4123 2014-12-08 08:00:00 +0700
2241 2014-12-08 09:00:00 +0700

等。 我尝试使用ruby,但我只能用这个来计算文件数:

dir = 'original'
puts Dir[File.join(dir, '**', '*')].count { |file| File.file?(file) }

或放置所有文件并按时间对其进行排序:

Dir[File.join(dir, '**', '*')].sort_by{ |f| File.mtime(f) }

那我怎么能这样做?可能是用bash脚本,或ruby ......

6 个答案:

答案 0 :(得分:2)

不确定我是否理解请求。你有子目录还是需要对子目录中的所有文件进行排序?如果没有,我使用这个命令

ls -lctr

解释

 -l      (The lowercase letter ``ell''.)  List in long format.  (See below.)  If the output is to a terminal, a total sum
         for all the file sizes is output on a line before the long listing.
 -c      Use time when file status was last changed for sorting (-t) or long printing (-l).
 -t      Sort by time modified (most recently modified first) before sorting the operands by lexicographical order.
 -r      Reverse the order of the sort to get reverse lexicographical order or the oldest entries first (or largest files
         last, if combined with sort by size

如果您需要计算文件,请使用:

find . -type f |wc -l

答案 1 :(得分:0)

arr = []
count = 0
Dir.glob("/path/**/*").each { |file| 
  if  File.file?(file)
    count+=1
    arr << File.mtime(file)
  end
}
puts count.to_s + " " + arr.sort.last.to_s
#=> 2241 2014-12-08 09:00:00 +0700

这不会考虑子目录文件

答案 2 :(得分:0)

如果我理解正确

Dir["Other/**"].sort_by{ |f| File.mtime(f) }.each do |item|
  if File.directory? item  
    print "#{Dir[File.join(item, '**', '*')].count} #{File.mtime(item)}\n"
  end
end

答案 3 :(得分:0)

您可以使用tap来计算文件,例如:

require 'fileutils'
dir = '.'
p Dir[File.join(dir, '**', '*')]
    .tap{|el| p el.length }
    .sort_by{ |f| File.mtime(f) }

打印计数和排序的文件数组。

答案 4 :(得分:0)

这是进入文件夹并从那里执行命令的bash脚本。

#!/bin/bash
curdir=$(pwd)
for f in $curdir/<parent folder name>/*
  do
     [ -d $f ] && cd "$f" && echo Entering into $f && wc -l
  done;

答案 5 :(得分:0)

这是我的红宝石代码:

require "Date"
dir = 'original'

for date in 1..7 do
  for hour in 0..23 do
    d = DateTime.new(2014, 1, 1, hour, 0, 0)
    d1 = DateTime.new(2014, 1, 1, hour+1, 0, 0)
    time = d.strftime("%H:%M")
    time1 = d1.strftime("%H:%M")

    puts ("Files on time 12/0#{date}/2014 #{time} (from #{time} -- #{time1}) :")
    puts Dir[File.join(dir, '**', '*')].count {|file|
      if ("12/0#{date}/2014 #{time}" < File.mtime(file).strftime('%m/%d/%Y %I:%M')) && (File.mtime(file).strftime('%m/%d/%Y %I:%M') < "12/0#{date}/2014 #{time1}")
        File.file?(file)
      end
    }
  end
  puts ("Files on time 12/0#{date}/2014 23:00 (from 23:00 -- 00:00 next day) :")
  puts Dir[File.join(dir, '**', '*')].count {|file|
    if ("12/0#{date}/2014 23:00" < File.mtime(file).strftime('%m/%d/%Y %I:%M')) && (File.mtime(file).strftime('%m/%d/%Y %I:%M') < "12/0#{date+1}/2014 #{time1}")
      File.file?(file)
    end
  }
end