根据大小比较两个文件

时间:2016-01-13 06:06:22

标签: linux grep centos ls du

我在提取不同大小的独特文件方面遇到了困难。

问题:在目录中存在少量文件,假设2个文件为2 mb,4个文件为4 mb,3个文件为6 mb。

现在,我们需要运行一个脚本来检查所有文件及其大小,并且只打印第一次出现的不同大小的文件。

EG。如果它读取文件f1并且它是2mb文件,它将执行ls -al of f1

下次如果它获得2 MB大小的文件,它将跳过它

因此在这种情况下,它将只打印3个不同大小的2 mb 4 mb和6 mb的文件。

[sumit.gupta@abc ~]$ ll mytestfolder/
total 38972
-rw-rw-r-- 1 sumit.gupta sumit.gupta 2097152 Jan  6 23:26 f1
-rw-rw-r-- 1 sumit.gupta sumit.gupta 2097152 Jan  6 23:27 f2
-rw-rw-r-- 1 sumit.gupta sumit.gupta 4194304 Jan  6 23:28 f3
-rw-rw-r-- 1 sumit.gupta sumit.gupta 4194304 Jan  6 23:28 f4
-rw-rw-r-- 1 sumit.gupta sumit.gupta 6291456 Jan  6 23:28 f5
-rw-rw-r-- 1 sumit.gupta sumit.gupta 6291456 Jan  6 23:28 f6
-rw-rw-r-- 1 sumit.gupta sumit.gupta 4194304 Jan 13 11:11 f7
-rw-rw-r-- 1 sumit.gupta sumit.gupta 4194304 Jan 13 11:12 f8
-rw-rw-r-- 1 sumit.gupta sumit.gupta 6291456 Jan 13 11:12 f9

我正在尝试脚本中的代码:

#!/bin/bash

source="/home/sumit.gupta/mytestfolder/"

ls -ltr /home/sumit.gupta/mytestfolder | cut -d ' ' -f 5,10 | \
    head -n -1 > /tmp/abc.txt
ls -ltr /home/sumit.gupta/mytestfolder | cut -d ' ' -f5 | \
    uniq > /tmp/def.txt
grep -F -vf /tmp/def.txt /tmp/abc.txt > xyz.txt

2 个答案:

答案 0 :(得分:0)

假设您不会因处理ls的输出而受到攻击(即,您输出的行始终具有第5列中的大小,并且不要在您的内容中嵌入新行等奇怪的内容文件名),这可以通过awk轻松完成。

它只对输入进行一次处理并记录已经看到的大小,以便它不会输出具有相同大小的后续文件:

pax> ll mytestfolder/ | awk '!seen[$5] {print; seen[$5] = 1}'
-rw-rw-r-- 1 sumit.gupta sumit.gupta 2097152 Jan  6 23:26 f1
-rw-rw-r-- 1 sumit.gupta sumit.gupta 4194304 Jan  6 23:28 f3
-rw-rw-r-- 1 sumit.gupta sumit.gupta 6291456 Jan  6 23:28 f5

答案 1 :(得分:0)

您可以使用" du -h directory_name / file_name"来获取文件大小。并将其与输入文件大小进行比较。