замените, 'в то время как' с более подходящей функцией, таким образом, цикличное выполнение ожидало бы каждого процесса для окончания

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

если находка -printf опция не работает на Вас, у Вас, вероятно, есть "неправильная" версия find установленный в Вашей системе (на моем Debian-поле, find часть findutils-4.4.2 пакет)

альтернатива использует stat:

$ stat -c %x /path/to/file.txt
2013-12-09 15:40:29.000000000 +0100
$

вместе с find, Вы использовали бы что-то как:

find $dirpath -type f -name $fname1 -exec stat -c %x \{\} \;

также отметьте, то использование, пишущий результат в переменную с чем-то как tim=$(find ...) даст Вам несколько результатов, если у Вас, окажется, будет несколько названных файлов ${fname} во всех подкаталогах ${dirpath}

2
13.04.2017, 15:37
2 ответа

Вместо того, чтобы найти трубопровод в петле, можно было бы пройти через Промежуточный файл. Это гарантирует, что шаг поиска и Шаг перекручивания происходит последовательно, без перекрытия. Что-то вроде следующее (я изменил ваше выражение для краткости):

find \( -name '*.mkv' -o -name '*avi' \) >files
<files while IFS= read file
do
    ffmpeg -i "$file" "$target" && rm -f "$file"
done

Обратите внимание, что это все еще не совсем безопасно; использование find -exec было бы проще, если бы ваши требования не включали запуск find строго перед первым вызовом на ffmpeg. С помощью этого требования, используя find -print0 вместе с xargs или параллельным GNU, можно было бы выполнить эту работу.

4
27.01.2020, 21:56

Причина, по которой код не работает должным образом, является несоответствием и или групп в исходном . Найти Команда:

find * \( -name '*.mkv' -o -name '*avi' -o -name '*mp4' -o -name '*flv' -o -name '*ogg' -o -name '*mov' ! -name '*-[900p-by-ZiriusPH].mkv' \) -print

Привязка для параметров - для печати Файлы, сопоставляемые для

  • имя * .mkv
  • или имя * .avi
  • или имя * mp4
  • или имя * flv
  • или имя * .ogg
  • или имя * .ogg
  • Или (имя * .mov и имя не * - [900p-by-ziriusph] .mkv)

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

find * \( -name '*.mkv' -o -name '*avi' -o -name '*mp4' -o -name '*flv' -o -name '*ogg' -o -name '*mov' \) ! -name '*-[900p-by-ZiriusPH].mkv' -print
1
27.01.2020, 21:56

Теги

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