2016-01-08 72 views
0

我正在查找文件夾中最年輕的文件的日期。但是,它是一個大文件夾(+14 000個文件),所以我想要有效地做到這一點。到目前爲止,我想出了下面的代碼:文件夾中最年輕的文件

folder <- 'my/folder/path' 
max(file.info(paste(folder,dir(folder),sep='/'))$mtime) 

不幸的是這需要年齡(這是有道理的,因爲他去,並要求其最後修改日期的每個文件)。有沒有辦法像dir()一樣使用整個文件夾的這個操作?我認爲這應該是可能的,因爲按日期在Windows資源管理器中排序不到一秒鐘。

+0

需要多少時間?我沒有看到任何明顯的方式來加速事情。但是,不要使用'paste',只需使用'dir(...,full.names = TRUE)',它可以給你完整的路徑,而不僅僅是文件名。也許這是'粘貼'部分,它需要一些時間。如果這還不夠,可以考慮通過'system'調用'ls'(如果你在Linux下)。 – nicola

+0

每100個文件大約7秒 – takje

+0

這非常奇怪,因爲對@fdetsch的回答,我測試了你的代碼,並且它對於1000 +文件夾需要不到一秒的時間。 100個文件7秒鐘是巨大的。也許你的文件系統嚴重分散。 – nicola

回答

1

嗯,我用於測試的文件夾中有1500個文件,下面的解決方案需要不到0.1秒的時間來執行。試試!

## list files in current working directory 
fls <- list.files() 

## extract file with latest modification date 
system.time({ 
    fls_info <- file.info(fls) 
    fls_info[which.max(fls_info$mtime), ] 
}) 

> user system elapsed 
> 0.010 0.017 0.073 
+0

嗯,你有SSD嗎?在我的電腦上,它與其他腳本相似。我也犯了錯誤,首先運行list.files沒有完整的路徑,然後它是超快的,因爲文件不存在。但是,在這種情況下,它不會返回任何有用的東西。 – takje

+0

我將工作目錄設置爲包含數據的文件夾,因此在此特定情況下不需要'full.names = TRUE'。我確實在使用可能有助於提高性能的SSD。沒有想到... – fdetsch

+0

我檢查了一個較小的數據集,你的腳本需要3.07s,而舊的需要3.15s。我認爲這裏的主要限制是磁盤速度:-) – takje

相關問題