-2

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

问题:在一个目录中存在几个文件,假设有 2 个 2 mb 的文件、4 个 4 mb 的文件和 3 个 6 mb 的文件。

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

例如。如果它读取一个文件 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
4

2 回答 2

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
于 2016-01-13T06:13:32.103 回答
0

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

于 2016-01-13T06:14:43.573 回答