2017-11-30 104 views
1

新しいセットをアップロードする前にcurlを使用してファイルを削除しようとしていますが、ファイルをワイルドカードしようとしています。Curlワイルドカードの削除

次のコードは、ある特定のファイルを削除するように働く

curl -v -u usr:"pass" ftp://11.11.11.11/outgoing/ -Q "DELE /outgoing/configuration-1.zip" 

しかし、私がしようとすると、以下の

curl -v -u usr:"pass" ftp://11.11.11.11/outgoing/ -Q "DELE /outgoing/configuration-*.zip" 

でファイルをワイルドカード私はGE

errorconfiguration-*: No such file or directory 
QUOT command failed with 550 

以下のエラーカールを削除する際にワイルドカードを使用できますか?

ありがとうございます。

+1

FTPにはワイルドカードはありません。クライアントでワイルドカードをサポートする必要があります。つまり、ワイルドカードをサポートしたいクライアントは、ディレクトリリストを取得し、一致する名前を選択し、それぞれの名前でコマンドを実行する必要があります。カールはそれをしません。 –

答えて

1

Curlは、FTPサーバー上のコマンドでワイルドカードをサポートしていません。必要な削除を実行するには、まずサーバー上のディレクトリにファイルをリストし、必要なファイルにフィルタをかけてから削除コマンドを発行する必要があります。あなたのファイルを仮定

はパスftp://11.11.11.11/outgoingであり、あなたのような何かを行うことができます:(私はあなたのサーバーへのアクセスを持っていないので、テストされていない)コマンド

curl -u usr:"pass" -l ftp://11.11.11.11/outgoing \ 
| grep '^configuration[-][[:digit:]]\+[.]zip$' \ 
| xargs -I{} -- curl -v -u usr:"pass" ftp://11.11.11.11/outgoing -Q "DELE {}" 

を次の処理を行います。

  1. サーバー上のoutgoing/outgoingディレクトリのディレクトリ一覧を出力します。
  2. configuration-で始まり、その後に1つ以上の数字があり、次に.zipで終わるファイル名のディレクトリリストをフィルタリングします。この正規表現をさまざまなパターンに合わせて調整する必要があるかもしれません。
  3. xargsに一致する名前を指定します。デリミタ{}を使用して一致する名前を補間し、サーバ上の各ファイルDELETEcurlコマンドを実行します。

curlコマンドを使用すると、一致する名前を1つの削除コマンドにまとめてすべてのファイルを削除することができますが、例として見やすくなりません。

+0

これはすばらしく見えるだけです。ファイルの実際の名前の正規表現を把握する必要があります。 test-test-test-test-7.17.1-1.117.zip(各ファイルの番号が異なります) – Bunion

+1

grepを "PCRE"モードにすることを躊躇しないでください(BREモードよりはるかに柔軟なモードです。私の例では) '-P'スイッチを使って、grepがサポートしている場合や、perl正規表現を' ack'や 'perl'で直接使うことができます:https://stackoverflow.com/questions/4794145 –

+1

...数字の内容を気にしない場合( 'test-11.22.-333.44-4..5--5.6。-10.- 10.zip'タイプの文字列など)、'^test 'のようなパターンを使うことができます[[:digit:] .-] zip $ 'を使用してください。本当に堅牢性が必要な場合は、少し混乱するかもしれません。 –

関連する問題