HY,

我试图删除文件夹中的某些重复文件(大约50000个文件),这些文件具有相同的名称,但唯一不同的是末尾的序列号:

aaaaaaaaaa.ext.84837384
aaaaaaaaaa.ext.44549388
aaaaaaaaaa.ext.22134455
bbbbbbbbbb.ext.11244355
bbbbbbbbbb.ext.88392456

我想根据序列号的最小值删除重复文件(.aaaaaaaaaaa.ext保留为.22134455,bbbbbbbbbbb保留为.11244355)

我提到我的文件夹中有很多文件〜50.000个文件,并且基于大小和md5的排序和过滤将像永远一样。

我尝试find -not -empty -type f -printf "%s\\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate find -not -empty -type f -printf "%s\\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate find -not -empty -type f -printf "%s\\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate但是要永远占用。

非常感谢你

#1楼 票数:2 已采纳

用这个

find . -name '*.ext.*' -print0 | sort -z | awk -v RS='\0' -F. '{fn=$0; num=$NF; $NF=""; if(a[$0]){printf "%s\0", fn};a[$0]++;}' | xargs -n 100 -0 rm -f

说明:

  1. find . -name '*.ext.*' -print0 find . -name '*.ext.*' -print0 :打印以空字符分隔的文件名。
  2. sort -z :排序零分隔的条目。
  3. awk :用空字符分隔记录,用a分隔字段. 删除最后一个字段-数字并记住剩余的文件名。 除第一个条目外,打印其他文件名,以空字符分隔。
  4. xargs -0 :在stdin和rm -f上接收由空字符分隔的文件名。

假设:所有文件都在当前目录中。

如果有子目录,并且要跳过它们,请添加-maxdepth 1选项来查找命令。

#2楼 票数:1

该脚本将删除所在目录中的所有重复文件。

按文件名列出和排序文件,序列号将用于对重复项进行排序,如果已经“访问过”文件,则将其删除,否则只需将文件名减去序列保存在一个临时变量中。

#!/bin/bash

tmp_filename=

for full_filename in `ls | sort`; do
    filename=$(basename "$full_filename")
    extension="${filename##*.}"
    filename="${filename%.*}"

    if [[ "$tmp_filename" == "$filename" ]]; then
        rm "$full_filename"
    else
        tmp_filename="$filename"
    fi
done

  ask by 123onetwothree translate from so

未解决问题?本站智能推荐:

1回复

在 Bash 中为每个数组元素添加一个序列号

给定 Bash 中的数组,是否有一种简单有效的方法可以按顺序为每个元素添加数字? 注意:在下面添加逗号只是为了使数组更具可读性! 示例,给出: my_array=(a, b, c, d, e) 期望结果: my_array=(1, a, 2, b, 3, c, 4, d, 5, e) 或
2回复

两次序列号丢失

如何使用bash脚本从两个序列中找出缺失的数字 从示例中我有包含以下数据的文件 输出:缺少的数字是
1回复

使用bash脚本删除重复文件

我分别在 path1 和 path2 有两个文件。 如果两个文件的内容相同,我想删除 path2 处的文件。 我试图用 但它不起作用。 为什么不?
2回复

删除文件中bash中特定参数的重复值

我有一个文件 并且文件具有带有第一个参数的重复行 我需要输出具有由逗号分隔的特定参数的唯一值 例如输出
1回复

bash删除旧文件

我有查找2年旧文件并将其删除的独特要求。 但不仅是文件以及相应的空目录。 我已经写了大多数逻辑,但是唯一尚待解决的是,当我从目录中删除特定文件时,如何在目录为空时删除相应的目录。 当我删除特定文件时,ctime / mtime也将相应地更新。 如何定位那些相应的较旧目录并删除它们? 任
2回复

Bash 脚本 - 删除旧文件

我有一个将压缩文件上传到 ftp 的脚本,这是我在下面显示的代码。 此代码工作正常,但我想对其进行调整,以便在上传文件后,它会删除超过一周的ftp 文件。
3回复

用bash解析.env文件[重复]

这个问题已经在这里有了答案: 模式后如何grep内容? 5个答案 我有.env文件,我正在尝试从中解析值。 我跑了 cat .env | grep PORT= 我有 PORT=3333 如何获取特定密钥的值?
4回复

Bash:读取 CSV 文件并根据条件对列进行排序

我正在尝试读取 CSV 文本文件并根据条件打印一列(已排序)的所有条目。 输入样本如下: 如果小时数(第三列)大于零,则需要打印用户 ID(第二列)。 但是,打印的数据应根据用户 ID 进行排序。 我编写了以下脚本: 这个脚本的输出是: 我期待以下输出: 任何帮助,将不胜感激。