Intereting Posts
условная замена строк на число Настроить алгоритм очистки кеша диска Установка vsftpd на Ubuntu – не удалось связать прослушивание сокета IPv4? Баш не может действовать как никто и негруппа? Есть ли способ сделать блок-блок Linux, который является просто смещением в существующее блочное устройство? Какая версия Red Hat используется для экзамена на сертифицированный системный администратор Red Hat? Мышь VMware иногда удерживается (не может «unclick», левая кнопка мыши перестает работать, хватайте ungrab) Странное поведение какой конфигурационный файл открывается sshd? traceroute дает только звезды + как исправить SMART-тест и состояние здоровья Swap bash script использует использование памяти htop Как предотвратить шлоот от переопределения файла passwd и других файлов, уже присутствующих в chrooted системе? Каков правильный helo для SMTP-сервера, который не получает почту и не имеет полного доменного имени? Уменьшить длину определенного столбца в текстовом файле с разделителями

Как проверить, присутствует ли файл, начинающийся с определенного префикса, в каталоге в сценарии оболочки

Мне нужно проверить, присутствует ли в каталоге файл, начинающийся с «ant». Если это присутствует, мне нужно удалить этот файл. Команда, которую я сейчас использую,

test -e $FILE_PATH/$FILE_NAME 

Я определил

 FILE_NAME="ant" 

Помещение * после того, как FILE_NAME не работает.

Один переносимый способ удалить такой файл, если существует только один:

 set -- "${FILE_PATH}/${FILE_NAME}"* [ $# -eq 1 -a -e "$1" ] && rm -- "$1" 

Мне кажется, что, если вам все равно, сколько из этих файлов муравьев существует заранее, но хотите, чтобы они (все) исчезли, когда вы закончите, просто:

 rm -f "${FILE_PATH}/${FILE_NAME}"* 

– Таким образом, если таких файлов не было, rm будет (принудительно-тихо) ничего не делать, но если бы были (какие-то 1 или более!) такие файлы, rm удалит их.

Вот еще один способ сделать это:

 -sh-4.1$ dir=$(pwd) ; filename="ant" if (( $(shopt -s nullglob; set -- ${dir}/${filename}*; echo $#) > 0 )); then rm ${dir}/${filename}* ; fi 

shopt -s nullglob : будет гарантировать, что shopt -s nullglob будет возвращено, если каталог пуст.

set -- ${dir}/${filename}* : устанавливает позиционный параметр.

$# : возвращает количество позиционных параметров. как условие возбуждения rm

как один линейный:

 1$ dir=$(pwd) ; filename="ant" ; if (( $(shopt -s nullglob; set -- ${dir}/${filename}*; echo $#) > 0 )); then rm ${dir}/${filename}* ; fi