Это будет обрабатывать общий случай, когда вы знаете, что есть повторяющиеся имена файлов, но не знаете, что это такое:
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]++ }'
В скрипте 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
Невозможно настроить ядро так, чтобы только использовали огромные страницы.