2017-02-09 35 views
-5

在一個目錄中,我想選擇具有給定總大小的最大文件並將它們移動到不同的目錄。在列出要選擇的文件時,我們需要按名稱對它們進行排序。bash:用於選擇總大小限制的最大文件的1個襯墊

作爲一個例子,說清楚,讓我們說總大小是500MB,每個文件大小小於500MB。

使用案例1:

  • a.bz2 200MB
  • b.bz2 100MB
  • c.bz2 300MB
  • d.bz2 400MB

    移動a.bz2和b.bz2(total = 300MB)到目錄../selected(因爲選擇第三個文件會使總大小> 500MB)

用例2:

  • a.bz2 200MB
  • b.bz2 200MB
  • c.bz2 100MB
  • d.bz2 400MB

    移動。 bz2,b.bz2和c.bz2(總數= 500MB)到目錄../selected

我知道如何添加每個文件的大小,但像在C程序中打破循環需要我編寫腳本。 (|)相反,我用管道希望它在1個襯墊

+0

他們是如何排序?文件的大小是否一直在增加?你是否想要適應最大數量的文件?這似乎有一半... – dawg

回答

2

不知道這是否有資格作爲一個班輪,但...

find . -type f -print0 | xargs -r -0 du -k | 
    awk '{sum+=$1; if(sum>500000){exit}; print}' | cut -f2- | tr '\n' '\0' | 
    xargs -r -0 mv -t ../selected 
+1

使用管道(|)絕對是一個班輪 –

+0

重新:建議編輯,我已經刪除了mp3部分,並且,afaik,'find'將按字母順序提供結果。 – webb