Дублировать файл со случайной вероятностью

На удаленной машине отредактируйте файл/etc/ssh/sshd_config. Изменение X11UseLocalhost к да.

Источник http://www.pclinuxos.com/forum/index.php?topic=109487.0

2
23.05.2017, 15:39
3 ответа

Для обработки файлов с пробелами следует использовать директиву -print0 для поиска GNU и параметр -d для команд bash. читать команду . Также непреодолимо указывать в кавычках "$ variable"

find pics/ -type f -print0 | while IFS= read -rd "" filename; do
    v=$((RANDOM % 2))
    if (( v == 0 )); then
        cp "$filename" dups/$RANDOM.jpg
    fi
done

Биты IFS = и -r предназначены для того, чтобы правильно обрабатывались пробелами и обратными косыми чертами. прочитать команду .

Внутри ((...)) арифметических выражений вы можете указывать переменные оболочки без $ .

2
27.01.2020, 22:00

Подход Яэгаси сработает, но дать ему на лету значения будет непросто. Команда «export» вычисляется во время синтаксического анализа Makefile и устанавливает переменную среды оболочки для рецепта. Затем вычисляют переменную среды во время выполнения рецепта «docs».

Если ваш фрагмент должен быть заполнен какими-либо зависимыми от цели переменными, я бы рекомендовал такой подход:

Быстрый подход

Если вам нужно просто запустить пару однолинейных, этот образец будет работать довольно хорошо.

run_script = python -c \
"import time ;\
print 'Hello world!' ;\
print '%d + %d = %d' %($1,$2,$1+$2) ;\
print 'Running target \'%s\' at time %s' %('$3', time.ctime())"

test:
    $(call run_script,4,3,$@)

Fancy Approach

Если вы хотите использовать странные символы и функции, for-loops или другие многострочные конструкции, вот модный образец, который будет работать красиво.

#--------------------------- Python Script Runner ----------------------------#

define \n


endef

escape_shellstring = \
$(subst `,\`,\
$(subst ",\",\
$(subst $$,\$$,\
$(subst \,\\,\
$1))))

escape_printf = \
$(subst \,\\,\
$(subst %,%%,\
$1))

create_string = \
$(subst $(\n),\n,\
$(call escape_shellstring,\
$(call escape_printf,\
$1)))

python_script = printf "$(call create_string,$($(1)))" | python

#------------------------------- User Scripts --------------------------------#

define my_script

def good_times():
    print "good times!"

import time
print 'Hello world!'
print '%d + %d = %d' %($2,$3,$2+$3)
print 'Runni`ng $$BEEF \ttarget \t\n\n"%s" at time %s' %('$4', time.ctime())
good_times()

endef

#--------------------------------- Recipes -----------------------------------#

test:
    $(call python_script,my_script,1,2,$@)
-121--84465-

Способ обработки файлов с помощью мест заключается в использовании директивы -print0 для поиска GNU и опции -d для команды bash read . Также настоятельно необходимо указать «$ variable»

find pics/ -type f -print0 | while IFS= read -rd "" filename; do
    v=$((RANDOM % 2))
    if (( v == 0 )); then
        cp "$filename" dups/$RANDOM.jpg
    fi
done

. Биты IFS = и -r должны обеспечивать правильную обработку мест и обратной косой черты командой read .

Внутри ((...) ) арифметические выражения, можно дать оболочечные переменные без $ .

-121--128652-
RAND_FILE=$( find pics/ -type f -print0 | shuf -n 1 -z )
# TODO check that RAND_FILE actually got a file, e.g. what
# if pics/ dir is empty, what happens?
cp "$RAND_FILE" ...

Хотя жесткая привязка копии позволит сэкономить место, если она находится в той же файловой системе и дублирующийся файл не будет изменен.

2
27.01.2020, 22:00

На основании данных Гленна:

#!/bin/bash

if [ ! -d "$2" ]; then
    mkdir -p $2 
fi

find $1/ -type f -print0 | while IFS= read -rd "" filename; do
    v=$((RANDOM % 4))
    if (( v == 0 )); then
        cp "$filename" $2/`uuidgen`.jpg
    fi
done

Я добавил

uuidgen

, потому что $ RANDOM не предоставил достаточно большого числового пространства для устранения коллизии. Один из способов улучшить этот сценарий - использовать число в качестве процента вероятности, а не просто как долю от 1 / n (только числа 1 / n будут $ RANDOM% n == 0)

0
27.01.2020, 22:00

Теги

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