查找所有同名文件

aor*_*zma 6 linux find

我在不同的文件夹中有很多同名的文件。如何找到所有路径并将它们写入文本文件?

roa*_*ima 6

这将处理您知道存在重复文件名但您不知道它们是什么的一般情况:

find -type f -print0 |
    awk -F/ 'BEGIN { RS="\0" } { n=$NF } k[n]==1 { print p[n]; } k[n] { print $0 } { p[n]=$0; k[n]++ }'
Run Code Online (Sandbox Code Playgroud)

awk脚本中,我们处理以 NULL 结尾的文件路径(因此我们可以处理可能包含换行符的文件名),并将其$0作为当前文件路径名。该变量n包含文件名组件。k[]是一个散列(以 为键n),用于计算此文件名的出现次数,并且p[]是另一个散列(也以 为键n),用于保存第一个对应的完整路径名。

例子

# Preparation
mkdir -p tmp/a tmp/b
touch tmp/a/xx tmp/a/yy tmp/b/yy tmp/b/zz

# Do it
find tmp -type f -print0 |
    awk -F/ 'BEGIN { RS="\0" } { n=$NF } k[n]==1 { print p[n]; } k[n] { print $0 } { p[n]=$0; k[n]++ }'

tmp/a/yy
tmp/b/yy

# Tidyup
rm -rf tmp
Run Code Online (Sandbox Code Playgroud)


mau*_*wns 3

我会用find. 就像这样:

find <path> -type f -name <filename> > same_name.txt
Run Code Online (Sandbox Code Playgroud)

例子:

find . -type f -name "foo" > same_name.txt
cat same_name.txt 
./dir_a/foo
./foo
./dir_b/foo
./tmp/foo
Run Code Online (Sandbox Code Playgroud)

上面的代码从当前目录开始递归查找所有名为 的文件foo。结果保存在文件中same_name.txt

  • @aortizma什么是“完整路径”?相对路径与任何其他路径一样完整。 (2认同)
  • @aortizma `find` 的结果以 *您* 指定的 `&lt;path&gt;` 开头。如果您的意思是不需要相对路径,请使用绝对路径作为“&lt;path&gt;”。 (2认同)