微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 无论父文件夹名称如何,查找和排序唯一文件名

所以想象我有一个像这样的目录结构:

~/Parent
├── A
|   ├── a.txt
|   ├── b.txt
|   └── b.tar
├── B
|   ├── b.txt
|   ├── c.txt
|   └── c.tar
└── C
    ├── c.txt
    ├── d.txt
    └── d.tar

如果我运行命令:

find ~/Parent -name *.txt | sort -f

我得到了结果:

~/Parent/A/a.txt
~/Parent/A/b.txt
~/Parent/B/b.txt
~/Parent/B/c.txt
~/Parent/C/c.txt
~/Parent/C/d.txt

正如您所期望的那样,但我希望得到的结果是:

~/Parent/A/a.txt
~/Parent/A/b.txt
~/Parent/B/c.txt
~/Parent/C/d.txt

有没有办法告诉uniq或另一个bash实用程序只获取唯一的文件名并忽略文件名称或告诉bash只给出排序列表中第一个文件名出现的方法

编辑:
可能会有一些澄清.我需要处理比原始示例显示的更复杂的系统:

~/Parent
├── A
|   ├── 45
|   |    └── Folder1
|   |         ├── a.txt
|   |         └── a.tar
|   └── 46
|        └── Folder1
|             ├── a.txt
|             └── a.tar     
├── B
|   ├── 12
|   |    └── Folder1
|   |         ├── b.txt
|   |         └── b.tar
|   └── 13
|        └── Folder1
|             ├── b.txt
|             └── b.tar   
└── C
    ├── 99
    |    └── Folder1
    |         ├── c.txt
    |         └── c.tar
    └── 100
         └── Folder1
              ├── c.txt
              └── c.tar   

我想要的是:

~/Parent/A/46/Folder1/a.txt
~/Parent/B/13/Folder1/b.txt
~/Parent/C/100/Folder1/c.txt

如果我做:

find ~/Parent -name "*.txt" | sort -f -r

我明白了

~/Parent/C/100/Folder1/c.txt
~/Parent/C/99/Folder1/c.txt
~/Parent/B/13/Folder1/b.txt
~/Parent/B/12/Folder1/b.txt
~/Parent/A/46/Folder1/a.txt
~/Parent/A/45/Folder1/a.txt

我想过滤掉:

~/Parent/C/99/Folder1/c.txt
~/Parent/B/12/Folder1/b.txt
~/Parent/A/45/Folder1/a.txt

解决方法:

使用和不使用其目录打印文件名,仅在文件名上排序-u,然后删除文件名,以便仅显示完整路径.

$find ~/Parent -name '*.txt' -printf '%f\t%p\n' | sort -k1,1 -u | cut -f 2-
~/Parent/A/a.txt
~/Parent/A/b.txt
~/Parent/C/c.txt
~/Parent/C/d.txt

请注意,这将任意决定冲突,因为查找不按特定顺序打印文件名.如果要始终使用第一个或最后一个重复文件,请添加额外的排序或排序-r调用

始终使用第一个

$find ~/Parent -name '*.txt' -printf '%f\t%p\n' | sort    | sort -k1,1 -u | cut -f 2-

总是使用最后一个

$find ~/Parent -name '*.txt' -printf '%f\t%p\n' | sort -r | sort -k1,1 -u | cut -f 2-

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐