首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何查找相同大小的文件?

如何查找相同大小的文件?
EN

Stack Overflow用户
提问于 2011-09-25 04:12:30
回答 7查看 7.1K关注 0票数 5

我有一个像这样的文件结构

代码语言:javascript
复制
a/file1
a/file2
a/file3
a/...
b/file1
b/file2
b/file3
b/...
...

在每个目录中,一些文件具有相同的文件大小,我想删除这些文件。

我猜如果问题可以解决一个目录,例如目录a,那么我可以围绕它包装一个for循环?

代码语言:javascript
复制
for f in *; do
???
done

但是如何找到相同大小的文件呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-09-25 04:53:11

使用“带空格的文件名”的解决方案(基于Kent (+1)和awiebe (+1)帖子):

代码语言:javascript
复制
for FILE in *; do stat -c"%s/%n" "$FILE"; done | awk -F/ '{if ($1 in a)print $2; else a[$1]=1}' | xargs echo rm

要使其删除重复项,请从xargs中删除echo

票数 6
EN

Stack Overflow用户

发布于 2011-09-25 04:23:15

代码语言:javascript
复制
 ls -l|grep '^-'|awk '{if(a[$5]){ a[$5]=a[$5]"\n"$NF; b[$5]++;} else a[$5]=$NF} END{for(x in b)print a[x];}'

这将只检查文件,不检查目录。

$5是ls命令的大小

测试:

代码语言:javascript
复制
kent@ArchT60:/tmp/t$ ls -l
total 16
-rw-r--r-- 1 kent kent  51 Sep 24 22:23 a
-rw-r--r-- 1 kent kent 153 Sep 24 22:24 all
-rw-r--r-- 1 kent kent  51 Sep 24 22:23 b
-rw-r--r-- 1 kent kent  51 Sep 24 22:23 c
kent@ArchT60:/tmp/t$ ls -l|grep '^-'|awk '{if(a[$5]){ a[$5]=a[$5]"\n"$NF; b[$5]++;} else a[$5]=$NF} END{for(x in b)print a[x];}'
a
b
c
kent@ArchT60:/tmp/t$ 

基于Micharajer的评论的łŠ更新

现在还支持带有空格的文件名

命令:

代码语言:javascript
复制
 ls -l|grep '^-'|awk '{ f=""; if(NF>9)for(i=9;i<=NF;i++)f=f?f" "$i:$i; else f=$9; 
        if(a[$5]){ a[$5]=a[$5]"\n"f; b[$5]++;} else a[$5]=f}END{for(x in b)print a[x];}'

测试:

代码语言:javascript
复制
kent@ArchT60:/tmp/t$ l
total 24
-rw-r--r-- 1 kent kent  51 Sep 24 22:23 a
-rw-r--r-- 1 kent kent 153 Sep 24 22:24 all
-rw-r--r-- 1 kent kent  51 Sep 24 22:23 b
-rw-r--r-- 1 kent kent  51 Sep 24 22:23 c
-rw-r--r-- 1 kent kent  51 Sep 24 22:40 x y

kent@ArchT60:/tmp/t$ ls -l|grep '^-'|awk '{ f=""
        if(NF>9)for(i=9;i<=NF;i++)f=f?f" "$i:$i; else f=$9; 
        if(a[$5]){ a[$5]=a[$5]"\n"f; b[$5]++;} else a[$5]=f} END{for(x in b)print a[x];}'
a
b
c
x y

kent@ArchT60:/tmp/t$
票数 8
EN

Stack Overflow用户

发布于 2011-09-25 04:26:33

如果你需要一个文件的大小,下面是代码:

代码语言:javascript
复制
FILESIZE=$(stat -c%s "$FILENAME")
echo "Size of $FILENAME = $FILESIZE bytes."

然后使用for循环获取结构中的第一项,将该文件的大小存储在一个变量中。

在for循环中将一个for循环嵌套到结构中每个项(不包括当前项)到当前项。

将相同文件的所有名称发送到一个文本文件中,以确保您已正确编写脚本(而不是立即执行rm )。

对此文件的内容执行rm。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7541616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档