В следующем примере будут сопоставлены все файлы в каталоге для ввода строки ($ string) и возврата соответствующего имени файла. Это не очень элегантный и эффективный способ выполнения этого. Для целей скорости я изменил условие for
, чтобы сравнить только файлы, начинающиеся с первого слова строки $.Прецедент сравнения строк в Bash
Проблема с этим сценарием является следующий - У меня есть два файла в каталоге:
Foo Bar.txt
Foo Bar Foo.txt
и сравнивают их в строку "Foo Bar 09.20.2010"
. Это вернет оба файла в этом каталоге, так как оба файла совпадают. Но мне нужно вернуть только файл, который соответствует строке самым точным способом - в нашем примере это должно быть Foo Bar.txt
.
Также, если у вас есть идеи, как решить эту проблему, пожалуйста, напишите ваши идеи, поскольку я еще не владею сценариями, и я уверен, что есть лучшие и, возможно, еще более простые способы сделать это.
#!/bin/bash
string="Foo Bar 09.20.2010"
for file in /path/to/directory/$(echo "$string" | awk '{print $1}')*; do
filename="${file##*/}"
filename="${filename%.*}"
if [[ $(echo "$string" | grep -i "^$filename") ]]; then
result="$file"
echo $result
fi
done
Вот разбивка, чего я хочу достичь. Два файла в каталоге для сопоставления с двумя строками, Правильный/Неверный в скобках означает, что результат был таким, каким я ожидал/хотел или не хотел.
2 Файлы в каталоге (содранное расширение для согласования):
Foo Bar.txt
Foo Bar Foo.txt
Для сравнения с 2 строк:
Foo Bar Random Additional Text
Foo Bar Foo Random Additional Text
Результаты:
compare "Foo Bar"(.txt) against Foo Bar Random Additional Text -> Match (Correct)
compare "Foo Bar"(.txt) against Foo Bar Foo Random Additional Text -> Match (Incorrect)
compare "Foo Bar Foo"(.txt) against Foo Bar Random Additional Text -> NOT Match (Correct)
compare "Foo Bar Foo"(.txt) against Foo Bar Foo Random Additional Text -> Match (Correct)
Спасибо всем за ваши ответы.
@Andrew - так что если есть точное совпадение, вы хотите _just_, но если нет точного соответствия, будет выполняться «частичное» совпадение? –
@martin clayton Да, требуется частичное совпадение, если точное совпадение не найдено. – Gargauth
Ладно, кажется, что я не был лучшим вариантом. Позвольте мне попробовать еще раз - строка 'Foo Bar 09.20.2010' должна соответствовать файлу' Foo Bar.txt'. А файл 'Foo Bar Foo 09.20.2010' должен соответствовать файлу' Foo Bar Foo.txt'. Надеюсь, теперь это имеет смысл ... – Gargauth