Простой способ сделать сложные вещи с FTP не состоит в том, чтобы иметь дело с FTP. Смонтируйте ресурс FTP как файловую систему. FUSE широко доступен в наше время, даже на серверах с ограниченными конфигурациями программного обеспечения. Можно использовать Curlftpfs для монтирования каталогов FTP.
mkdir /net/someftp.example.com
curlftpfs -o user=bob someftp.example.com /net/someftp.example.com
Сохраните пароль FTP в ~/.netrc
.
Затем используйте нормальные команды оболочки для копирования файлов с именами, которые Вы хотите. Я не рекомендую эту схему даты микросекунды, поскольку Вы зависите от часов, обновляющих достаточно быстро, который мог быть проблематичным особенно, если часы корректируются, в то время как Ваш сценарий работает. Используйте счетчик вместо этого.
counter=10000
date=$(date +%Y%m%d-%H%M%S)
for x in /net/someftp.example.com/dir/N*.txt; do
cp -p "$x" "N-$date-${counter#1}.TXT"
counter=$((counter+1))
done
Когда Вы закончите с каталогом FTP, размонтируйте его с fusermount -u /net/someftp.example.com
.
Это должно работать с GNU sed:
sed -i '1s/^/string/' file
это отличается от вашего решение в том, чтобы не добавлять новую строку.
Перед запуском команды содержимое файла следующее:
some
text
here
already
После выполнения команды:
stringsome
text
here
already
Другой способ (аналогичный моему ответу в этом вопросе):
printf 'string' | paste -d'\0' - infile > outfile
или:
printf string | cat - infile > outfile
или:
{ printf string; cat infile; } > outfile