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