Дата, арифметика и тернарный оператор в одной строке

Решение rsync намного эффективнее, но это возможно и с find . Худший случай: один процесс на файл:

find ... -exec cp --parents {} /dest/path \; -delete

find удалит исходный файл только после успешного копирования.

Но мы можем запустить проект «весело с поиском» для оптимизации (удалите echo s и \ перед | после тестирования):

find ... -type d -exec echo mkdir /target/{} \; -exec bash -c \
  'echo find {} -maxdepth 1 -type f -print0 \| '\
  'xargs -0 mv --target-directory=/target/{}' \;

В типичном случае: 5 процессов на каталог.

В вашем примере (несколько файлов в каталоге) может иметь смысл создать -print0 | xargs -0 mkdir в целевом корне сначала (и убрать mkdir из основного вызова find ).

1
05.02.2019, 00:18
2 ответа

Ваш скрипт не -переносимый (, так как вы используете letи ((.. ))), сбивает с толку (, так как вы используете иletи((.. ))), отсутствует в документации (нет комментариев, а имена переменных не являются -описательными )и незначительно небезопасными (, поскольку вы не указали расширение$t).

Если хотите переписать, вот мой:

#!/bin/sh

min_duration=500
t_start=$(date +%s)
# script is here
t_end=$(date +%s)
elapsed=$(( t_end - t_start ))

# sleep long enough to make sure 'min_duration' seconds has elapsed, 
# but at least 1 second
sleep "$(( elapsed < min_duration ? min_duration - elapsed : 1 ))"
4
27.01.2020, 23:15

Вот как это сделать, используя bashспециальный параметрSECONDS:

#!/bin/bash                                                                                                                                                                                  

SECONDS=0
# script is here                                                                                                                                                                             
sleep "$(( 500 > SECONDS ? 500 - SECONDS : 1 ))"

Обычно SECONDSвозвращает время (в секундах )с момента запуска скрипта, но можно присвоить любое значение (или )установить таймер.

1
27.01.2020, 23:15

Теги

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