Этот скрипт должен сделать работу за вас. Не забудьте переключить его с DEBUG на LIVE :
#!/bin/sh
list=`ls *-file.txt | sort -n`
i=1
for f in $list
do
#DEBUG MODE
echo "mv $f $i-file.txt"
#LIVE MODE
#mv $f $i-file.txt
i=$(($i + 1))
done
А вот версия без жестко закодированного расширения:
#!/bin/sh
if [ -z $1 ]
then
echo "
You need to pass a prefix. For example:
${0##*/} -file.txt
"
exit 1
fi
list=`ls *${1} | sort -n`
i=1
for f in $list
do
#DEBUG MODE
echo "mv $f ${i}${1}"
#LIVE MODE
#mv $f ${i}${1}
i=$(($i + 1))
done
Судя по ошибке, ваша копия openssl
не скомпилирована или не связана с поддержкой больших файлов. fopen
, вероятно, не работает, потому что пытается определить размер файла сразу после его открытия и терпит неудачу.
Тогда хитрость заключается в том, чтобы заставить openssl
читать из трубы и писать в трубу. Трубы не имеют размера, и fopen
знает это, так что с этим должно быть все в порядке. Тому, что находится на другом конце трубы, не нужно делать ничего особенного, оно просто должно быть проходным фильтром между openssl
и реальными файлами. Именно в этом и заключается работа cat
. cat
, который теперь становится вещью, непосредственно работающей с большим файлом, должен иметь поддержку больших файлов, но как базовая утилита, поставляемая ОС, давайте предположим, что это так.
cat test.img | openssl enc -aes-256-cbc -salt | cat >test.img.enc