簡體   English   中英

Bash腳本定期列出文件

[英]Bash script to list files periodically

我有一組龐大的文件,共64,000個,我想創建一個Bash腳本,該腳本使用以下命令列出文件名:

ls -1 > file.txt

每4,000個文件,並將結果file.txt存儲在單獨的文件夾中。 因此,每4000個文件的名稱都列在存儲在文件夾中的文本文件中。 結果是

folder01包含列出文件#0-#4000的file.txt

folder02包含列出文件#4001-#8000的file.txt

folder03包含列出文件#8001-#12000的file.txt

folder16包含列出文件#60000-#64000的file.txt

非常感謝你提前

你可以試試

ls -1 | awk '
{
    if (! ((NR-1)%4000)) {
        if (j) close(fnn)
        fn=sprintf("folder%02d",++j)
        system("mkdir "fn)
        fnn=fn"/file.txt"
    }
    print >> fnn
}'

說明:

  • NR是awk中的當前記錄號,即:當前行號。
  • NR從第一行的1開始,因此我們減去1,使第一行的if語句為真
  • system從awk內調用操作系統功能
  • print本身將當前行打印到標准輸出,我們可以使用>>將輸出重定向(並附加)到文件
  • awk中所有未初始化的變量都將為零值,因此我們不需要在程序開頭說j=0

這會讓你非常接近;

ls -1 | split -l 4000 -d - folder

通過split運行ls的結果,使用數字后綴( -d )從標准輸入( -split每4000行( -l 4000 ),並開始使用folder命名folder

結果在folder00folder01 ,...

這是使用awk的精確解決方案:

ls -1 | awk '  
 (NR-1) % 4000 == 0 {            
    dir = sprintf("folder%02d", ++nr)
    system("mkdir -p " dir);            
 }                                      
 { print >> dir "/file.txt"} '

上面已經有了一些很好的答案,但我也建議你看一下watch命令。 這將每n秒重新運行一次命令,因此您可以觀察輸出。

暫無
暫無

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

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