использование статистики для обеспечения метки времени для касания

Просто используйте nice (вместо renice). Например:

nice -n 10 command

Это будет работать command с низким приоритетом.

11
18.04.2012, 18:05
4 ответа

stat's вывод является меткой времени Unix, также названной секундами с Эпохи.

Весь GNU coreutils, которые принимают дату, позволяет Вам помещать метку времени вместо этого путем добавления префикса метки времени @.

Так попробуйте это

touch -d @$ORIGTS $f

См. coreutils - Секунды с эпохи

16
27.01.2020, 19:57
  • 1
    ах, который объясняет много меток времени, которые я видел в Linux теперь! Большое спасибо –  Tim Alexander 18.04.2012, 18:38

touch может использовать метку времени файла с помощью -r опция. Вы могли бы хотеть произвести в другой файл (я принимаю ниже этого -if входной файл и -of выходной файл),

for f in ...; do
    sudo /opt/ABBYYOCR9/abbyyocr9 ... -if $f ... -of $f.new
    touch -r $f $f.new
    mv $f.new $f
done
8
27.01.2020, 19:57

IFS=$(echo -en "\n\b")

Так как Вы принимаете оболочку с echo -e, и Вы имеете, избивают Вашу строку хижины так или иначе, можно использовать IFS=$'\n\b'. Создание клавиши Backspace разделитель является довольно странным. Вам не нужно IFS поскольку, что Вы делаете так или иначе.

OLDIFS=$IFS

IFS=$OLDIFS

Обратите внимание, что это восстанавливает старое значение IFS только если IFS был первоначально установлен. Если IFS был первоначально сброшен, это устанавливает IFS к пустой строке, которая полностью отличается. В ksh, ударе или zsh, если необходимо установить IFS временно, можно написать код в функции и сделать IFS локальный для этой функции. В других оболочках необходимо быть осторожны относительно случая сброса.

`find /mnt/library/Libra/Libra/Ashfords -name "*.pdf"`

Никогда не используйте замену команды относительно вывода find.

  • Это разделяет вывод в символах в $IFS. Если Вы устанавливаете IFS к новой строке затем это разделяет вывод в новых строках, но Вы все еще не можете обработать имена файлов, содержащие новые строки.
  • Не только результат замены команды, разделенной на слова, но затем каждое слово используется в качестве шаблона шарика. Если Вы названные файлы A[12].pdf, A1.pdf и A2.pdf, Вы закончите с A1.pdf A2.pdf A1.pdf A2.pdf. Можно выключить globbing с set -f (и назад на с set +f), но здесь (как большая часть времени) правильный путь не состоит в том, чтобы использовать замену команды.

Используйте -exec аргумент find (или если Ваша система имеет -print0, можно использовать find … -print0 | xargs -0 … вместо этого; это только полезно для действия на несколько файлов сразу при необходимости в мобильности к древним системам Linux или существующим системам OpenBSD, которые имеют -print0 но нет -exec … {} +).

ORIGTS=`stat -c "%Y" $f`
# [transform $f]
touch -t $ORIGTS $f

Обратите внимание пропавших без вести двойных кавычек вокруг $f (они не необходимы, если это результаты разделения, и Вы не изменились IFS с тех пор и globbing выключен, но действительно, всегда помещает двойные кавычки, если Вы не знаете, почему Вы не можете оставить их на).

Это неуклюже и непортативно (stat не существует во всех системах, и его аргументы отличаются через различные системы, где это существует). touch имеет портативную опцию установить файл на метку времени другого файла: touch -r REFERENCE_FILE FILE. Я рекомендовал бы один из двух подходов вместо этого:

  • Если Вы можете, сначала преобразовать исходный файл в новый файл, затем звонить touch -r назначать дату нового файла и наконец перемещать новый файл в место. Лучше удостовериться, что вывод прекрасен, прежде чем что-либо произойдет с входом; иначе, если преобразование будет прервано по какой-либо причине (например, сбой питания), то Вы потеряете данные.
  • Если преобразование является черным квадратом, что Вы не имеете никакого контроля, можно использовать touch -r дважды: однажды для сохранения даты исходного файла на пустом временном файле (который будет автоматически создан), с другой стороны после преобразования для восстановления даты с помощью временного файла.

Таким образом:

find /mnt/library/Libra/Libra/Ashfords -name '*.pdf' \
     -exec sh -c 'transform "$0" to "$0.tmp" && touch -r "$0" "$0.tmp" && mv -f "$0.tmp" "$0"' {} \;
3
27.01.2020, 19:57

Почему-то пропустил ответ про touch -r; если по какой-то странной причине у вас нет GNU coreutils’ stat, как в принятом ответе, и вы не можете использовать touch -r, вот как получить метку времени в удобном дляtouch-формате с помощью BSD -, например stat.

% /usr/bin/stat -f '%Sm' johnson                   
Oct 23 22:51:00 2012
% /usr/bin/stat -t '%Y%m%d%H%M.%S' -f '%Sm' johnson
201210232251.00
% touch foo
% touch -t $(/usr/bin/stat -t '%Y%m%d%H%M.%S' -f '%Sm' johnson) foo
% /usr/bin/stat -f '%Sm' foo                    
Oct 23 22:51:00 2012

Но на самом деле просто используйтеtouch -r:

% touch foo
% touch -r johnson foo
% /usr/bin/stat -f '%Sm' foo
Oct 23 22:51:00 2012
0
27.01.2020, 19:57

Теги

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