SFTPセッションから返された「ls -l」出力からファイル長を抽出します。

SFTPセッションから返された「ls -l」出力からファイル長を抽出します。

私のローカルサーバーは、作成されたバックアップファイルのサイズを確認したいリモートサーバーのstfpにのみアクセスできます。だからログインして "ls -l"コマンドを実行するためにbashを書くことができました。

file_listing=$(sftp connection_string:Path/to <<<$'ls -l file.sql.gz')

...生産する:

$ echo $file_listing
Changing to: /Path/to sftp> ls -l file.sql.gz -rw------- ? 19009 19009 7834147822 Oct 19 23:02 file.sql.gz

bash 基本的な文字列操作や grep などのツールを使用して、この文字列のファイルサイズ部分を抽出できるようにしたいです。この場合7834147822

私はgreppingを試み、パターンを得るためにgreppingを試しました。

size_pattern='([0-9]{1} {1}[0-9]+ {1}[A-Z]{1})'

または...

echo $file_listing  | egrep -o '[[:digit:]]\{1\}[[:blank:]][[:digit:]]\+[[:blank:]][A-Z]\{1\}'

...または他のもの。9 7834147822 Oうまくいけば、"

馬になる?誰にもアイデアはありますか?

最高の願い、スポーツウェア

ベストアンサー1

参照変数を使用しないと、echoすべての内容が1行に印刷されます。引用符を追加すると、操作が簡単になりますgrep

しかし、私はまだ以下を好みますawk

echo "$file_listing"  | awk 'NR==3{print $5}'

もう一つの興味深いアプローチは次のとおりですset

set -- $(tail -n1 <<< "$file_listing")
echo $5

次からアクセスできる場合は、次のものを解析するls -lよりも使用する方がよいでしょう。statsshsftp

ssh user@server 'stat --format %s /path/to/file'

おすすめ記事