我在查找目录和子目录中唯一命名的文件时遇到了问题。文件的名称必须是唯一的,而不是 md5 值或内容。
uniq
我已经设法通过此代码获取唯一文件列表,但只有名称,没有它们的位置(目录名称)。如果目录名称在字符串中,则无法正确排序或使用...
find . -type f -name "*" | xargs -I% basename % | sort -u
我得到的结果示例:
same_name
some_file
test_file
预期结果:
./dir1/same_name
./dir1/some_file
./dir3/test_file
这是目录树的一个例子,但它可以更大更深
.
├── dir1
│ ├── same_name
│ └── some_file
├── dir2
│ └── same_name
├── dir3
│ └── test_file
└── same_name
答案1
就像是
find . -type f -printf "%f:%p\n" | awk -F: '!seen[$1]++ {print $2}'
让 find 为你打印出基本名称,然后使用 awk 仅打印出路径名第一的看到基本名称的时间。
我使用冒号作为字段分隔符,使用换行符作为(默认)记录分隔符。两者都是有效的文件名字符。这个使用空字符作为记录分隔符(对于文件名不合法),并且更可靠
find . -type f -printf "%f\0%p\0" |
awk -v RS='\0' '{basename=$0; getline} !seen[basename]++'