を使用してS3バケットに入っているかどうか確認します。必要なファイルをすべて正常にアップロードするプログラムがあります。私は新しいファイルを毎日アップロードしなければなりません。私はファイルをアップロードした後、もはやそれらを必要とせず、従ってそれらを同期させることを望んでいない。ファイルがs3cmd
s3cmdを使用してS3内に存在する場合は、パスとファイル名があるかどうかを確認する方法があるかどうか不思議です。
を使用してS3バケットに入っているかどうか確認します。必要なファイルをすべて正常にアップロードするプログラムがあります。私は新しいファイルを毎日アップロードしなければなりません。私はファイルをアップロードした後、もはやそれらを必要とせず、従ってそれらを同期させることを望んでいない。ファイルがs3cmd
s3cmdを使用してS3内に存在する場合は、パスとファイル名があるかどうかを確認する方法があるかどうか不思議です。
s3cmdでlsコマンドを使用すると、S3にファイルが存在するかどうかを知ることができます。
バッシュコード
path=$1
count=`s3cmd ls $path | wc -l`
if [[ $count -gt 0 ]]; then
echo "exist"
else
echo "do not exist"
fi
用途:./s3_exist.sh S3:
編集//foo/bar.txt:
cocoatomoは、コメント、s3cmd ls $path
リスト内のすべてのファイルを指摘したようにそのはから$path
で始まります。より安全な方法は、s3cmd info $path
を使用して終了コードを確認することです。
新しいバッシュは、コード
path=$1
s3cmd info $path >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
echo "exist"
else
echo "do not exist"
fi
そのbar.txtとbar.txt.bakと仮定すると、バケットのS3に存在する:// FOO、 "s3cmdのLS S3を://foo/bar.txt" を示します次の出力。
$ s3cmd ls s3://foo/bar.txt
2013-11-11 11:11 5 s3://foo/bar.txt
2013-11-11 11:11 5 s3://foo/bar.txt.bak
コマンド結果から2行目を削除する必要があるため、不要な行をフィルタリングするために「awk」コマンドを使用します。
$ filename=s3://foo/bar.txt
$ s3cmd ls ${filename} | awk "\$4 == \"${filename}\" { print \$4 }"
2013-11-11 11:11 5 s3://foo/bar.txt
最後に、すべてのコマンドをビルドします。 AWS CLIの新しいバージョンで
filename=s3://foo/bar.txt
count=$(s3cmd ls ${filename} | awk "\$4 == \"${filename}\" { print \$4 }" | wc -l)
if [ $count -eq 0 ]; then
echo "file does not exist"
else
echo "file exists"
fi
、あなたはファイルならば真1フラグflag_existsを取る、我々はs3cmd LSを使用することができ、ファイルやディレクトリ
count=$(aws s3 ls $path | wc -l)
if [ $count -gt 0 ]
then
(>&2 echo "$path already exists!")
return
fi
の存在を検出するために、次のコードを使用することができますそこにファイルがない場合はfalseです。
FLAG_EXISTS=false
for j in $(s3cmd ls s3://abc//abc.txt); do
if [[ "$j" == "s3://abc//abc.txt" ]]; then
FLAG_EXISTS=true
break
fi
done
if [ "$FLAG_EXISTS" = false ]; then
echo 'file not exists'
else
echo 'file exists'
fi
説明 - uはabc.txt s3cmdのLSを検索する場合、それはとてもループと条件の場合ならば使用してチェックし、abc.txt abcd.txtなどのような値を返すことができるようにlsが多くの値を返すことができるので、ファイルが存在しています。
countは、そのディレクトリ内のファイル数です。私はそれを理解しています。しかし、私はそれを説明しようと思ったのですか? –
指定されたパスとファイル名に一致するファイルの数をカウントします。 S3は重複したファイル名をサポートしていないので、このカウントは0(ファイルが存在しない)または1(ファイルが存在する)のいずれかになります。 "-gt"は "より大きい"の略です。これがもっと明白な場合は[[$ count -eq 1]]を実行することもできます。 Bashの条件式の詳細については、[リンク](http://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html) –
"s3cmd ls"の最初の引数は、バケット名、またはファイル名ではなくバケット名に続く接頭文字列。 "s3cmd ls s3:// foo/b"は "s3://foo/bar.txt"をリストしているので、 "$ count -gt 0"はs3:// foo/bが存在するかどうかを表示しません。 – cocoatomo