我有一个充满文件的目录,所有文件都遵循命名约定“file_001”、“file_002”等。这些文件都存储在不同的子目录中,有些文件具有相同的名称。
我已经使用 find 命令并将输出重定向到一个文本文件,该文件包含目录中所有文件的路径列表,我正在尝试做的是在文本文件中搜索任何重复的文件名。
我最好的猜测是使用 grep,但我想不出正确的语法。
最佳答案
它只打印重复文件的名称:
find /your/path -type f -printf "%f\n" | sort | uniq -d
它打印重复文件的路径:
方法一:
find /your/path -type f | grep -F -f <(find /your/path -type f -printf "%f\n" | sort | uniq -d)
这是我的最爱,因为它不会在磁盘中保存任何临时文件。
它使用进程替换,因此请注意使用显式 #!/bin/bash
行调用您的脚本。您可以在这个问题中看到详细信息:Syntax error in shell script with process substitution
方法二:
find /your/path -type f > your_file_with_paths.txt
find /your/path -type f -printf "%f\n" | sort | uniq -d |
while read FILENAME; do
grep -F "$FILENAME" your_file_with_paths.txt
done
说明:
find /your/path -type f
此命令返回/your/path 下的所有文件路径。
find /your/path -type f -printf "%f\n" | sort | uniq --repeated
它只取文件名而不是完整路径,对它们进行排序,然后只过滤重复的(--repeated
只是 -d
的长形式).
grep -F -f <(find /your/path -type f -printf "%f\n" | sort | uniq --repeated)
# or
grep -F "$FILENAME" your_file_with_paths.txt
对于任何重复的文件名,查找它们的路径。
关于linux - 在目录中查找重复的文件名(不指定确切的文件名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26329651/