我在提取不同大小的独特文件方面遇到了困难。
问题:在目录中存在少量文件,假设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
答案 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"来获取文件大小。并将其与输入文件大小进行比较。