簡體   English   中英

Python:如何在Linux的特定目錄中查找上一個小時創建的新文件夾/目錄

[英]Python: How can i find new folders/directories created in last hour in a specific directory in Linux

我正在嘗試編寫一個Python程序,該程序調用bash腳本以在目錄中的新數據上運行。

我的目錄中有數百個子目錄。 每小時生成幾個子目錄。 我試圖進入這些新的子目錄,並對其中的數據運行腳本。

可以說我目錄的路徑是/ data1 / realtime:

在“實時”目錄中,每小時產生一個新的子目錄。 我怎么知道每小時產生一個新的子目錄,並逐個進入其中的每個..?

非常感謝!!

佳日

您可以使用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)

使用find命令(在您的shell中):

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

它將打印最近60分鍾內已創建或已添加,刪除或重命名文件或子目錄的所有目錄。

當然,如果需要,您當然可以從Python的subprocess模塊中調用它,但是由於您已經在使用bash,也許您可​​以直接在bash腳本中使用它?

這是使用subprocess調用find的方法:

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)。 如果你是這樣,這應該工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM