Один лайнер, чтобы найти, идентичны ли первые строки двух файлов

Это зависит от нескольких вещей в Вашем веб-приложении, но Вы могли:

  1. Используйте mod_speling для принуждения корректной капитализации имен файлов и каталогов. Это требует "реальных" имен файлов.
  2. Используйте RewriteMap для перезаписи URL (как замечено здесь):

В .htaccess:

RewriteEngine on
RewriteBase /
RewriteMap insensitive tolower:
RewriteRule ^[\/]*(.*)$ /${insensitive:$1} [R,L]

2
задан 2 December 2010 в 17:17
2 ответа

Можно использовать статус выхода diff и head в обрабатывают замену:

[kbrandt@localhost ~]$ echo arf > foo
[kbrandt@localhost ~]$ echo arf > foo1
[kbrandt@localhost ~]$ diff <(head -n1 foo) <(head -n1 foo1)
[kbrandt@localhost ~]$ echo $?
0
[kbrandt@localhost ~]$ echo foo > foo1
[kbrandt@localhost ~]$ diff <(head -n1 foo) <(head -n1 foo1)
1c1
< arf
---
> foo
[kbrandt@localhost ~]$ echo $?
1
[kbrandt@localhost ~]$ 

Разность сравнивает файлы, если статус выхода является нулем, чем соответствие файлов. Ненулевой означает, что они не соответствовали или была ошибка рабочая разность, которая кажется маловероятной. $? переменная оболочки, которая имеет статус выхода предыдущей команды. Можно перенаправить вывод разности путем добавления > /dev/null в конец различной команды, если Вы не хотите видеть его на экране:

[kbrandt@localhost ~]$ diff <(head -n1 foo) <(head -n1 foo1) > /dev/null
[kbrandt@localhost ~]$ echo $?
1
5
ответ дан 3 December 2019 в 09:09

Вот способ сделать это в Bash, не используя три вызова для внешних утилит. Это также работает в оболочках POSIX, которые не имеют замены процесса:

read a<file1; read b<file2; [ "$a" = "$b" ]; echo $?

Вот другой способ использовать AWK:

awk 'FNR==1{a[NR]=$0; if (NR==2) exit a[1]!=a[2]; nextfile}' file1 file2

Обратите внимание, что сравнения AWK возвращаются 1 для истинного, таким образом, я использую != таким образом, оболочка получает 0, которому она верит, верно.

2
ответ дан 3 December 2019 в 09:09

Теги

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