#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