bash if statement help

Это было сделано без команды tailи с использованием правильного синтаксиса для awkпри выполнении из expectскрипта:

#!/usr/bin/expect -f
log_file./log/post.log
set servername [exec awk {FNR>1 {print $1}} server_file.txt]
system mv./log/post.log./log/"$servername"_[clock format [clock seconds] -format {%Y%m%dT%H%M%S}].log
-2
16.07.2019, 18:48
3 ответа

Если вы собираетесь звонить mv1,4 миллиона раз, это будет медленно -никак иначе. Но вы уже знаете шаблон имен файлов, так почему бы не объединить их, вызывая несколько файлов однимmv:

for yy in {1990..2019}
do
    y=${yy#[0-9][0-9]}  # remove first two digits of year
    mv./*D??"$y" "/cygdrive/d/RAID5/RAID200/invoices/1/$yy"
done

Или, если это приводит к ошибкам «длина аргумента превышена», используйтеxargs:

for yy in {1990..2019}
do
   y=${yy#[0-9][0-9]}
   printf "%s\0"./*D??"$y" |   # NUL-delimited filenames for xargs -0
       xargs -0 -r mv -t "/cygdrive/d/RAID5/RAID200/invoices/1/$yy"
done
4
28.01.2020, 05:14

Выполнение 1,4 миллиона вызовов mvдля перемещения объектов между разными дисками будет медленным. Попробуйте звонить mvменьше раз.

Предполагая, что ??в вашем шаблоне должен соответствовать веку:

for year in {1990..2019}; do
    find. -maxdepth 1 -type f -name "*D$year" \
        -exec mv -t "/cygdrive/d/RAID5/RAID200/invoices/1/$year/" {} +
done

Это зациклило бы на всех соответствующих годах. Для каждого года будет выполняться команда find, которая перемещает одновременно как можно больше файлов, соответствующих заданному шаблону, в пакетном режиме.

Код предполагает, что вы используете GNUmv(для опции -t)и GNUfind(или любой find, который имеет-maxdepth)вместе с bash. Если ваш исходный каталог не содержит подкаталогов, вы можете удалить -maxdepth 1из команды.

5
28.01.2020, 05:14

Чтобы все знали -Я использовал эту опцию, муру. Я на самом деле пробовал оба варианта, опубликованных выше.

С небольшой модификацией... Я делал примерно 3 файла в секунду с исходными 50 строками кода. Теперь я делаю около 30 -50 секунд.

для гг в {1998..2018} делать y=${yy #[0 -9][0 -9]} #удалить первые две цифры года mv -v./sync1/_D????$y "/cygdrive/d/RAID5/RAID200/tape _backup/$yy" #mv -v./sync1/_D????'$y ' "/cygdrive/d/RAID5/RAID200/tape _backup/$yy" сделано

:)

0
28.01.2020, 05:14

Теги

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