Подстановочный знак перестал работать

Вместо создания файла abc.xyz создайте символическая ссылка на (реальный) файл abc.xyz.YYYYMMDD :

linkname="abc.xyz"

today="$( date +"%Y%m%d" )"
filename="$linkname-$today"

if [[ ! -e "$filename" ]] || [[ ! -e "$linkname" ]]; then
    touch "$filename"
    ln -s -f "$filename" "$linkname"
fi

Это создаст

lrwxr-xr-x  1 kk  kk  16 Feb  2 11:16 abc.xyz -> abc.xyz-20170202
-rw-r--r--  1 kk  kk   0 Feb  2 11:16 abc.xyz-20170202

, и ваша программа, записывающая в abc.xyz , фактически будет записывать в abc.xyz-20170202 .

На следующий день, когда вы запустите это, вы получите

lrwxr-xr-x  1 kk  kk  16 Feb  2 11:31 abc.xyz -> abc.xyz-20170203
-rw-r--r--  1 kk  kk   0 Feb  2 11:16 abc.xyz-20170202
-rw-r--r--  1 kk  kk   0 Feb  2 11:31 abc.xyz-20170203
1
03.07.2018, 17:25
1 ответ

Либо в текущем каталоге нет файлов с суффиксом .txt, либо в конце строки скрипта есть невидимый символ, например возврат каретки.

Возврат каретки мог появиться там, если вы редактировали текстовый файл сценария на компьютере с Windows и сохранили его как текстовый файл DOS.

Чтобы удалить их из всех строк, используйте dos2unixв файле скрипта.

В любом случае шаблон не расширяется, потому что ему ничего не соответствует. Таким образом, оболочка сохраняет нерасширенный шаблон.

Если вы хотите, чтобы скрипт полностью пропускал цикл при отсутствии совпадающих имен файлов, установите параметр оболочки nullglob:

shopt -s nullglob

Это заставляет bashрасширять не соответствующие -шаблоны в пустую строку.

2
27.01.2020, 23:32

Теги

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