UNIX/SED - Подстановочный знак в имени файла

Короткий ответ: :да, да, нет.

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

Обычно существуют параметры конфигурации, которые можно изменить, чтобы контролировать, насколько быстро операционная система пытается сохранить данные на диске; есть также большая палочка sync, которая позволяет записывать все оставшиеся данные. (Обратите внимание, что во всех случаях операционная система может только гарантировать, что данные попадут на контроллер диска, и, возможно, попросить диски очистить свои буферы — нет абсолютной гарантии, что данные действительно хранятся на диске.)

В Linux настройки, которые вы можете настроить, находятся в /proc/sys/vm; соответствующая документация —sysctl/vm.txt— ищите dirty_. Различные настройки позволяют указать, сколько данных может ожидать записи или как долго, прежде чем операционная система начнет записывать их на диск. Есть два механизма, которые могут вмешаться здесь :есть фоновый поток, который записывает ожидающие данные на диск (dirty_background_...), и когда процессы начинают создавать слишком много данных, операционная система заставит их записи эффективно сбрасываться на диск (введение чего-то вродеfsync). Причина существования двух механизмов заключается в том, что операционная система пытается сохранить баланс между производительностью ввода-вывода и производительностью обработки :, пока запущенные процессы не записывают данные слишком быстро, об этом позаботится фоновый поток; но как только они начинают записывать слишком много данных, чтобы диски не успевали, они замедляются, что помогает системе догнать ожидающие записи данные,и позволяет избежать записи слишком большого количества данных.

Если вы беспокоитесь о своих данных, не пытайтесь проверить, был ли вызван fsync, просто запустите sync.

(Игнорировать /proc/sys/vm/dirtytime_expire_seconds, это совсем другое.)

1
04.09.2019, 21:15
1 ответ

Как упомянул @msp9011, вам, вероятно, нужно поменять местами ? с *, чтобы разрешить сопоставление нескольких символов.

Подстановочные знаки обсуждает взаимопроникновение bash подстановочных знаков. Заявление ? «может представлять любой отдельный символ», а *«может представлять любое количество символов»

$ cat run.sh 
#!/bin/bash
#cleans blank rows
sed -i '/^$/d' file*.csv
$ cat file_201909091143.csv 
line1

line3
$./run.sh 
$ cat file_201909091143.csv 
line1
line3
1
28.01.2020, 00:01

Теги

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