Python:如何在Linux中的特定目录中找到最近一小时创建的新文件夹/目录

时间:2015-02-09 16:28:40

标签: python linux bash

我正在尝试编写一个python程序,该程序调用bash脚本来运行目录中的新数据。

我的目录中有几百个子目录。每小时生成几个子目录。我试图进入这些新的子目录并在其中的数据上运行我的脚本。

让我说我的目录的路径是/ data1 / realtime:

在目录'实时'每小时都会生成新的子目录。我怎么知道每小时产生一个新的子目录并逐个进入每个子目录??

非常感谢!!

yash

2 个答案:

答案 0 :(得分:3)

您可以使用os.listdir集进行比较:

import  os
path = "."
prev = [d for d in os.listdir(".") if os.path.isdir(os.path.join(path,d))]
os.mkdir("foo")

curr = [d for d in os.listdir(".") if os.path.isdir(os.path.join(path,d))]
new = set([d for d in os.listdir(".") if os.path.isdir(os.path.join(path,d))]).difference(prev)

for d in new:
   print(new)

答案 1 :(得分:3)

使用find命令(在shell中):

find /data1/realtime -mmin -60 -type d

它将打印所有已创建的目录或已在最近60分钟内添加,删除或重命名文件或子目录的目录。

如果需要,您当然可以从Python subprocess module中调用它,但由于您已经使用了bash,也许您可​​以直接在bash脚本中使用它?

以下是如何使用subprocess调用查找:

import subprocess
directories = subprocess.check_output(
    ['find', '/data1/realtime', '-type', 'd', '-mmin', '-60']
).splitlines()
# directories content: ['/data1/realtime/dir1000', ...]

这可能会捕获正在创建过程中的目录,就像msw在评论中所说的那样,所以如果要查找最后一小时但不是最近5分钟前创建的目录,可以添加另一个测试到find

find /data1/realtime -mmin -60 -mmin +5 -type d

只是看看它是如何工作的,这里是一个bash会话:

$ find --version
find (GNU findutils) 4.4.2
...
$ mkdir /tmp/test
$ cd /tmp/test
$ date 
Mon Feb  9 21:27:00 CET 2015
$ touch a
$ touch -t 02092100 b  # 27 minutes ago
$ touch -t 02082100 c  # yesterday
$ ls -alh
total 0
drwxr-xr-x  2 andre andre 100 Feb  9 21:27 .
drwxrwxrwt 24 root  root  520 Feb  9 21:26 ..
-rw-r--r--  1 andre andre   0 Feb  9 21:27 a
-rw-r--r--  1 andre andre   0 Feb  9 21:00 b
-rw-r--r--  1 andre andre   0 Feb  8 21:00 c
$ find . -mmin -60 -mmin +5
./b

正如所料,新创建的文件(a)和昨天(c)的文件被排除在外,但包含了27分钟前更新的文件(b)。如果您

,这应该有效