我使用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 ......
答案 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