linux - 在目录中查找重复的文件名(不指定确切的文件名)

标签 linux bash shell unix

我有一个充满文件的目录,所有文件都遵循命名约定“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/

相关文章:

linux - 如何在 ZeroMQ PUB-SUB 模式中检查消息是否由于 HWM 而被丢弃

python - 获取当前打开文件的完整路径

c++ - 当 * 作为参数之一传递时 argc 的值在 c 中调用程序

bash - 如何在AWK中整理多个文件?

windows - 适用于 Windows 的命令行对话框工具

linux - 为 linux 构建不带 PNG_READ_eXIf_SUPPORTED 的 libpng

php - 在多线程之前在长时间运行的后台 shell 脚本中传递数组

linux - 多文件 View ,如数据库 View

java - 如何通过使用 JAVA 中的 pem 文件连接到服务器来跟踪远程服务器中的后端日志

linux - 如何在 shell 脚本中删除模式匹配前后的特定字符?