Если /var/log/http/access.log
больше, чем оперативная память и, следовательно, не может быть кэшировано, запуск большего количества параллельных процессов может быть хорошей альтернативой многократному чтению access.log
-, особенно если у вас несколько ядер. Это будет запускать один grep
для каждого IP параллельно (+ пару вспомогательных процессов-оберток ).
pargrep() {
# Send standard input to grep with different match strings in parallel
# This command would be enough if you only have 250 match strings
parallel --pipe --tee grep ^{} '>' /tmp/access-{}.log ::: "$@"
}
export -f pargrep
# Standard input is tee'ed to several pargreps.
# Each pargrep gets 250 match strings and thus starts 250 processes.
# For 1200 ips this starts 3600 processes taking around 1 GB RAM,
# but it reads access.log only once
cat /var/log/http/access.log |
parallel --pipe --tee -N250 pargrep {} :::: ips
mv evaluateA2P/ action2pose_bk/ evaluateA2P/
Результатом этой команды будет перемещение каталога action2pose_bk
в каталог evaluateA2P
. Чтобы отменить это, просто переместите его назад, запустив:
mv action2pose_bk/evaluateA2P.
Как и в вашей демонстрации, вот что я получаю, когда пробую ваш реальный сценарий:
mv evaluateA2P/ action2pose_bk/ evaluateA2P/
mv: cannot move 'evaluateA2P/' to a subdirectory of itself, 'evaluateA2P/evaluateA2P'
Ваша команда не была успешно завершена. Что он сделал, так это переместил action2pose_bk
в evaluateA2P
, так что просто переместите его снова
mv evaluateA2P/action2pose_bk.
Или, с вашим демо,
mv test1/test2.
В этот момент вы можете еще раз попробовать свою предполагаемую команду. Обратите внимание, однако, что это удастся, только если целевой каталог action2post_bk/evaluateA2P
либо пуст, либо еще не существует :
mv evaluateA2P/ action2pose_bk/evaluateA2P/