Удалить файл, пока он используется

Вы путаете два совсем других типа исходных данных.

  1. Стандартный вход (stdin)
  2. Параметры командной строки

Они отличаются, и полезны для различных целей. Некоторые команды могут взять вход обоими способами, но они обычно используют их по-другому. Возьмите, например, wc команда:

  1. Проходить мимо входа stdin:

    ls | wc -l
    

    Это будет считать строки в выводе ls

  2. Передача, введенная параметрами командной строки:

    wc -l $(ls)
    

    Это будет считать строки в списке файлов распечатанными ls

Совершенно другие вещи.

Для ответа на вопрос это кажется, что Вы хотите получить уровень от вывода первой команды и затем использовать уровень в качестве параметра командной строки для второй команды. Вот один способ сделать это:

rate=$(command1 | sed -ne 's/^rate..\([0-9]*\)%.*/\1/p')
command2 -t "rate was $rate"

Объяснение sed:

  • s/pattern/replacement/ команда должна заменить некоторый шаблон
  • Средства шаблона: строка должна запуститься с "уровня" (^rate) сопровождаемый любыми двумя символами (..), сопровождаемый 0 или больше цифрами, сопровождаемыми a %, сопровождаемый остальной частью текста (.*)
  • \1 в замене означает контент первого выражения, полученного в \(...\), так в этом случае цифры перед % знак
  • -n флаг sed управляйте средствами не распечатать строки по умолчанию. p в конце s/// управляйте средствами распечатать строку, если была замена. Короче говоря, команда распечатает что-то, только если было соответствие.
2
22.10.2015, 08:17
2 ответа

Предположение, что в памяти находится весь RAW-файл, неверно.Обычно, когда файл открывается, процесс получает дескриптор файла, который можно использовать для чтения / записи файла.

Когда файл открывается процессом, а затем удаляется, пока файл еще открыт, это не означает, что файл удаляется мгновенно. Файл фактически удаляется, когда больше нет процессов с дескрипторами (дескрипторами файлов) для этого файла. Вы можете использовать lsof , чтобы увидеть, есть ли у файла еще дескрипторы, и когда вы удаляете такой файл, он часто отображается с текстом (удален) , добавленным к строке.

Дисковое пространство также не освобождается при удалении открытого файла, поэтому можно безопасно использовать файл, пока он открыт. Когда удаленный файл больше не имеет активных файловых дескрипторов, файловая система освободит занимаемое дисковое пространство.

3
27.01.2020, 21:56

Если все три процесса ffmpeg открыли входной файл перед его удалением , , то вполне возможно, что это сработает. Но если ffmpeg закроет файл и снова откроет его, произойдет сбой. Если вы можете определить, что ffmpeg этого не делает, то, вероятно, вы в безопасности.

2
27.01.2020, 21:56

Теги

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