Второй шаг в Вашем конвейере немного повреждается (он искажает обратные косые черты и ведущий и запаздывающий пробел), и сложный способ сделать это. Использовать tr
преобразовать в нижний регистр. Вы не должны ограничивать поиск файлами: каталоги могут столкнуться также.
find . | tr '[:upper:]' '[:lower:]' | LC_ALL=C sort | LC_ALL=C uniq -d
Обратите внимание, что это только работает, если имена файлов не содержат новые строки. В соответствии с Linux, переключателем к пустым байтам как разделитель для преодоления новых строк.
find . -print0 | tr '[:upper:]' '[:lower:]' | LC_ALL=C sort -z | LC_ALL=C uniq -dz
Это печатает строчные версии имен файлов, который не действительно способствует выполнению чего-то о файлах.
Если Вы используете zsh, забываете о find
: zsh имеет все, в чем Вы нуждаетесь, встроил.
setopt extended_glob
for x in **/*; do
conflicts=($x:h/(#i)$x:t)
if (($#conflicts > 1)); then
## Are all the files identical regular files?
h=()
for c in $conflicts; do
if [[ -f $c ]]; then
h+=(${$(md5sum <$c)%% *})
else
h=(not regular)
break
fi
done
if (( ${#${(@u)h}} == 1 )); then
# Identical regular files, keep only one
rm -- ${conflicts[1,-2]}
else
echo >&2 "Conflicting files:"
printf >&2 ' %s\n' $conflicts
fi
fi
done
В основном я видел это с неисправными ленточными накопителями (вплоть до того, что сначала заподозрил ленту и отправил в аналитическую лабораторию), однако другие комментаторы правы в этом вопросе. Конечно, бывают случаи, когда вам нужно даже увеличить параметр buffer_kbs
модуля st
для правильной записи на ленту.
У меня больше нет ленточного накопителя, но вы можете использовать sg3_utils
, чтобы запросить накопитель, и одно из полей IIRC содержало информацию о размере блока.