簡體   English   中英

在Linux中的目錄中快速列出隨機文件集

[英]Quickly list random set of files in directory in Linux

問題:我正在尋找一種高效,簡潔的方法,僅使用Bash在Linux目錄中列出N個隨機選擇的文件。 必須從不同的子目錄中隨機選擇文件。

我為什么要問:在Linux中,我經常想測試目錄中某個屬性的文件的隨機選擇。 該目錄包含1000個文件,因此我只想測試其中的一小部分,但是我想從感興趣目錄的不同子目錄中獲取它們。

以下返回50個“隨機”選擇的文件的路徑:

find /dir/of/interest/ -type f | sort -R | head -n 50

該目錄包含許多文件,並且駐留在讀取速度較慢(通過ssh訪問)的已掛載文件系統上,因此該命令可能需要花費幾分鍾。 我相信問題在於第一個find命令會找到每個文件(慢速),然后才打印隨機選擇。

如果您定期使用locateupdatedb更新(可能是默認的每日更新),則可以:

$ locate /home/james/test | sort -R | head -5
/home/james/test/10kfiles/out_708.txt
/home/james/test/10kfiles/out_9637.txt
/home/james/test/compr/bar
/home/james/test/10kfiles/out_3788.txt
/home/james/test/test

您多久需要一次? 提前定期進行工作,以便在需要時可以快速使用。

創建一個refreshList腳本。

#! /bin/env bash

find /dir/of/interest/ -type f | sort -R | head -n 50 >/tmp/rand.list
mv -f /tmp/rand.list ~

將其放在您的crontab中。

0 7-20 * * 1-5 nice -25 ~/refresh

然后,您將始終擁有一個小時以下的〜/ rand.list。

如果您不想使用cron並且對文件的年齡不太挑剔,只需編寫一個函數,即可每次使用文件刷新文件。

randFiles() {
  cat ~/rand.list
  {  find /dir/of/interest/ -type f |
       sort -R | head -n 50 >/tmp/rand.list
      mv -f /tmp/rand.list ~
  } &
}

如果您無法運行定位並且find命令太慢,是否有任何理由必須實時完成?

是否可以使用cron將find命令的輸出轉儲到文件中,然后從那里隨機抽取?

暫無
暫無

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

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