Это было сделано без команды 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
Если вы собираетесь звонить mv
1,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
Выполнение 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
из команды.
Чтобы все знали -Я использовал эту опцию, муру. Я на самом деле пробовал оба варианта, опубликованных выше.
С небольшой модификацией... Я делал примерно 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" сделано
:)