2014-06-27 24 views
0

在一個包含數千個版本化文件(ls -v格式,文件名...文件名(n))的目錄中,如何僅保留每個文件的最大或最小大小(以字節爲單位,而不是版本號)? 額外的獎勵,如果也可能保持最小和最大,如果需要。 保留刪除所有其他文件。每個目錄中只保留最大/最小的版本化文件?

任何常用的unix shell工具,最好避免xargs(主機系統沒有安裝xargs)。

可以信任任何以(number).ext結尾的文件名是版本化文件。

+0

有點難以回答 - 沒有足夠的信息。如果你沒有xargs,有'find'命令的gnu版本? filanems可以包含空格或一些奇怪的字符,如換行符?這些文件被命名爲'file.NNN.ext'或'fileNNN.ext'?版本號是一個或多個與點相連的數字,如'file.1.5.4.ext'.Have其他基本命令,如'grep'' sed'' sort'之類的? – jm666

+0

否gnu找到。這不是一個硬限制,我當然可以遠程安裝磁盤,但寧願在主機上運行它,這是一個非常沒有裝飾的盒子。所有常用的shell命令,但很可能沒有gnu變體。 – kilves76

+0

版本號是一個總是在括號內的數字filename(n).ext(例如「filename(3).ext」,原始文件是「filename.ext」),並且保證文件名中的圓括號內沒有其他數字。普通的文件名,空間是好的,有趣的東西像新線不是。 – kilves76

回答

0

上手需要一點時間,特別是因爲ls -S無法正常工作(這是一個低端的soho文件服務器盒,2.6內核和古老的低內存版本幾乎任何東西),但核心我們的想法是按排序對每個文件的版本進行排序,如果chmod,owner和group都是相同的,它會根據大小進行排序。

ls -1p | grep -v/| sed 's/ *([0-9]*)//' | sed 's/\.ext//' | uniq | \ 
awk '{system("ls -l \""$0"\"\* | sort -r | head -n 1")}' | \ 
sed 's/.*[0-9][0-9]:[0-9][0-9] //' > largest.txt 

看上的解決方案將同時刪除最小和最大awk的系統調用另一個AWK運行rm爲其餘項目裏面,但我AWK是很生疏。

相關問題