Как найти файл/имена каталогов, которые являются тем же, но с другой капитализацией/случаем?

Я использовал бы Perl для этого, или по крайней мере awk.

perl -ne '
    BEGIN {
        print "\"Job Name\", \"Time\", \"Schedule\", \"Machine\", \"Description\", \"Command\", \"\n";
    }
    chomp; s/^\s+//; s/\s+$//;
    if (($_ eq "" || eof) && exists $fields{insert_job}) {
        print "\"", join("\", \"", @fields{qw(insert_job start_times days_of_week machine description command)}), "\"\n";
        delete @fields{qw(insert_job)};
    }
    if (/^([^ :]+): *(.*)/) {$fields{$1} = $2}
'

Объяснения:

  • BEGIN блок выполняется однажды в начале сценария, остальное работает за каждой входной строкой.
  • Строка, которая начинается chomp снимает изоляцию с ведущего и запаздывающего пробела.
  • Первое if строка включает пустые строки (разделители абзацев), если поле insert_job присутствует.
  • delete строка удаляет insert_job поле. Добавьте другие имена полей, которых Вы не хотите выходить за пределы от одного абзаца до следующего.
  • Последнее if строка хранит поля.
7
04.08.2013, 02:30
3 ответа

Если у Вас есть GNU uniq, можно отсортировать нечувствительно к регистру (-i), и использование -d распечатать только дублирующиеся строки:

find . | sort -f | uniq -di

Как @StephaneChazelas упомянутый в его ответе, это не могло бы сделать то, что Вы ожидаете, могут ли у Вас быть дублирующиеся пути, которые только отличаются в случае, если (как a/b/foo и A/b/foo).

7
27.01.2020, 20:17
  • 1
    Вы, вероятно, хотите sort -f здесь. Также отметьте тот GNU uniq имеет то же ограничение как GNU tr как в нем не работает на соответствие случаю многобайтовых символов. –  Stéphane Chazelas 04.08.2013, 01:55
  • 2
    @StephaneChazelas, почему я хочу sort -f? Если uniq может иметь дело со случаем, почему я должен был бы также сделать sort нечувствительный к регистру? И что Вы подразумеваете под многобайтовыми символами? Вещи как \n,\r и т.д.? Как у них могут быть различные случаи? –  terdon♦ 04.08.2013, 03:19
  • 3
    Попробовать export LC_ALL=C; printf '%s\n' a A b B | sort | uniq -di. Некоторый вид локалей нечувствительно к регистру, некоторые другие (как C) не делают. uniq нуждается в отсортированном входе, его дублирующиеся строки должны быть смежными. –  Stéphane Chazelas 04.08.2013, 10:25

Принимающие имена файлов не содержат символы новой строки, Вы могли сделать что-то как:

find . | tr '[:upper:]' '[:lower:]' | sort | uniq -d

Обратите внимание что некоторые tr реализации как GNU tr не изменяйте случай многобайтовых символов.

Также обратите внимание, что путь, о котором это сообщает, не может быть путями никакого файла. Например, если существует a ./a/b/fOo и a ./A/b/fOo файл, сообщит это ./a/b/foo. Если это не то, что Вы хотите, можно хотеть совершенствовать требования.

2
27.01.2020, 20:17

Все эти идеи плохи. Используйте контрольные суммы и убедитесь, что файлы являются тем же. Затем задача становится легкой.

find . -type f -exec md5sum {} + |
sort |
perl -a -nE'push(@{$db{$F[0]}},$F[1]);END{for(keys%db){say"Dupe detected @{@db{$_}}"if scalar@{$db{$_}}>1}}'

Этот будет sha1sum каждый файл в каталоге и всех подкаталогах и производить всех простофиль того файла, если будет кто-либо. Я сделал конвейерную мультилинию для удобочитаемости.

-1
27.01.2020, 20:17
  • 1
    OP не ищет идентичные файлы, он ищет файлы с тем же именем, содержание может отличаться. Извините, но именно эта идея плоха :). –  terdon♦ 04.08.2013, 16:58
  • 2
    Его первый пример сказал, что другой размер шрифта, удовлетворите его, чтобы предположить, что у него нет идеи того, что он хочет. –  Evan Carroll 04.08.2013, 20:25
  • 3
    Достаточно сказать, что английский язык не является его родным языком, едва отказ OP это. Однако пример ясно показывает, что он не сравнивает файлы, просто ища файлы того же имени нечувствительным к регистру способом. Все, что я говорю, - то, что Вы могли бы хотеть считать вопрос более тесно прежде, чем решить, какие идеи "плохи". –  terdon♦ 04.08.2013, 20:47
  • 4
    Согласованный. Это не обращается к беспокойству OP. Я также нахожу это странным, что Вы маркировали ответ принятым OP как плохая идея, потому что это не то, что хочет OP! –  Joseph R. 04.08.2013, 20:53

Теги

Похожие вопросы