найти и переместить файлы без перезаписи и с помощью вывода

Напечатать несколько байт - это не самое сложное. Сложнее найти, какие байты должны быть напечатаны. Чтобы сделать это, lsb_release должен проанализировать множество системных файлов. Вы можете увидеть, где он тратит время на ввод-вывод, отследив его системные вызовы:

strace -f -tt -T -o lsb_release.strace lsb_release

На моей машине примерно 1/3 времени уходит на выполнение команды

dpkg-query -f '${Version} ${Provides}\n' -W lsb-core lsb-cxx lsb-graphics lsb-desktop lsb-languages lsb-multimedia lsb-printing lsb-security

которая анализирует базу данных установленных пакетов. Других значительных потребителей ввода-вывода нет.

Поскольку это Python скрипт, вы также можете использовать Python profiler, чтобы получить представление о том, где он проводит время:

python -m cProfile

Для меня это не очень показательно, самые большие затраты времени связаны с инициализацией скрипта (он использует довольно много библиотек) и вызовом подпроцесса dpkg.

0
17.01.2019, 17:27
1 ответ

Вы можете использовать nопцию:

find. -type f -name "abc*" -exec mv -nt "/path/to/foo/bar" "{}" +

Изman mv:

-n, --no-clobber
          do not overwrite an existing file
4
28.01.2020, 02:23

Теги

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