Как проверить, содержит ли имя файла определенный набор символов в ksh?

#shell #ksh

Вопрос:

У меня много файлов в одном подкаталоге. Я должен проверить, содержит ли имя файла определенный набор символов.

например

1.У меня есть такие файлы, как xyz.xml,jkxyz.xml,bxyz.xml,jkl.xml в одном подкаталоге Dir-Путь к каталогу

 #!/bin/ksh  for b in $Dir/*  do  if [ "$b" = * "$Dir/xyz" * ]  then  echo "Exist"  else  echo "Not Exist"  fi  done  

3.ЕСЛИ имя файла содержит xyz, оно должно возвращать exist, в противном случае оно должно возвращать not exist.

4.Я сделал это. Но он не возвращает вывод истинного состояния

5.Кто-нибудь, помогите мне решить эту проблему.

Ответ №1:

В ksh вы можете выполнить сопоставление глобусов внутри [[...]] с == оператором:

 if [[ "$b" == *xyz* ]]  

Обратите внимание, что «внутри» подстановочных знаков нет пробелов.

Это case утверждение работает и здесь, оно выполняет сопоставление с образцом:

 case "$b" in   *xyz*) echo Exist ;;  *) echo Not Exist ;; esac  

Однако, если вы хотите перебрать файлы «xyz» в $Dir, вы можете просто сделать

 for file in "$Dir"/*xyz*; do  do_stuff_with "$file" done