Как соответствовать суффиксу имени файла

Любой GNU автоинструменты (как упомянуто в комментарии), или также CMake является опцией.

Автоинструменты GNU являются более традиционным подходом, но (и возможно разговор только за меня) я не думаю, что люди действительно слишком взволнованы перспективой начальной установки проекта с помощью них. Ну, это - кривая обучения в любом случае. CMake является более новым ребенком на блоке, и возможно менее распространенный (и все еще имеет кривую обучения). Это имеет свой собственный синтаксис, и это генерирует make-файлы для Вашей платформы. CMake делает имеет явное преимущество того, чтобы быть не так un*x-centric; это работает надежно над Unix, окнами и Mac также (например, это может генерировать msvc проекты, например, вместо make-файлов.)

Править: и конечно так как 'make-файлы' были предложены, этот ответ соглашается с тем предположением. Но возможно просто сценарий Python или (удушье) простая программа Java более подходили бы для этой задачи; сценарии/язык программирования сделали бы это то же через платформы.

3
03.01.2013, 01:08
4 ответа

Используйте regex привязку конца ($), например:

echo "$file" | grep '\.xml$'

Для нахождения всех файлов, заканчивающихся "xml", я предложил бы использовать find команда, например:

find . -name '*.xml'

Рекурсивно перечислил бы все XML-файлы из текущего каталога.

4
27.01.2020, 21:20

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

case $file in
  *.xml) echo "$file";;
esac

Если Вы хотите сделать что-то, когда имя файла не соответствует:

case $file in
  *.xml) echo "matched $file";;
  *) echo "skipping $file";;
esac
1
27.01.2020, 21:20

Если бы у Вас уже есть имя файла в переменной, хороший подход был бы расширением параметра

$ echo $file
text.xmllsls
$ echo ${file%.xml*}.xml
text.xml

Где %.xml* это последнее вхождение .xml и все позади него будет удалено. Для этого я также повторил .xml снова.

Или, чтобы иметь тест также

$ file=test.xmlslsls
$ file2=${file%.xml*}.xml
$ if [ $file = $file2 ]; then echo $file; fi
$
$
$ file="test.xml"
$ file2=${file%.xml*}.xml
$ if [ $file = $file2 ]; then echo $file; fi
test.xml

Или, на одной строке

$ if [ $file = ${file%.xml*}.xml ]; then echo $file; fi
0
27.01.2020, 21:20

самый простой способ ...

echo  file=machine_configuration.xml | cut -d '.' -f 1
-1
27.01.2020, 21:20

Теги

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