2015-09-03 4 views
3

Чтобы сэкономить место на моем резервном диске, я хочу «зачистить» файлы данных, которые можно легко восстановить и, следовательно, не нужно выполнять резервное копирование.'parallel' или 'find' для итерации по каталогам? [bash]

В настоящее время я использую «параллельную» команду UNIX, чтобы по существу разделить большой вложенный цикл for на многие ядра, причем каждый процесс работает с разными входными аргументами.

# PARALLEL COMMAND CALLING mothballer.sh WITH INPUT ARGUMENTS 
time parallel -j +0 --max-procs 8 "./mothballer.sh {1} {2} {3} {4} {5}" ::: {date1,date2} ::: {exp1,exp2} ::: {2,4,8} ::: {16,32,64} ::: {1,2,3,4,5} 

... который интерпретирует аргументы командной строки и передает их в следующий сценарий, «motherballer.sh»:

# reading command line arguments 
date=$1 
experiment=$2 
parameter1=$3 
parameter2=$4 
trial=$5 

# paths to original directory and a mirror directory in the backup server 
WORK_DIR=/$WORK_MACHINE/${date}/${experiment}/${parameter1}/${parameter2}/${trial}/results 
BACKUP_DIR=/$BACKUP_SERVER/${date}/${experiment}/${parameter1}/${parameter2}/${trial}/results 

# create the mirror directory in the backup server 
mkdir -p $BACKUP_DIR 

# do the backup ("rsync" is similar to "cp") 
rsync -avP $WORK_DIR/*.csv $BACKUP_DIR 
# run rsync again to verify it worked; "rm" old files. 

Есть ли лучший способ это? Например, используя «find»?


EDIT: Кроме того, было бы неплохо иметь возможность использовать «*» подстановочный, так как не все эксперименты имеют те же параметры комбинации и т.д. (то есть каталоги, одинаково глубоко, но имеют другую папку имена). Это самое большое ограничение с моим текущим методом (см. Выше).

+0

* «Лучше» * каким образом? Быстрее? Более избирательно? Меньшие? –

+0

Может быть, этот способ все еще в порядке, но я в основном задаюсь вопросом, могу ли я сделать то же самое с «найти». Кажется более подходящим для поиска в каталогах. – yunque

+0

@MarkSetchell на самом деле, «более избирательный» - это то, что мне нужно ... см. Мой EDIT в нижней части OP. – yunque

ответ

2

Если командная строка не слишком долго:

time parallel ./mothballer.sh ::: */*/*/*/* 

В mothballer '$ {дата}/$ {эксперимент}/$ {параметр1}/$ {параметр2}/$ {испытание}' будет слились до 1 доллара США.

Если глубина отличается (ЗШ или новее Баш):

shopt -s globstar 
time parallel ./mothballer.sh ::: **/results 

В mothballer «$ {дата}/$ {эксперимент}/$ {параметр1}/$ {параметр2}/$ {испытание}/results 'будет объединено до 1 доллара США.