1

次のタスクを実行するシェル スクリプトを作成しようとしています。

  1. Linux Box A から Linux Box B に接続する
  2. 最新の 5 つの prop.jar ファイルのリストを取得する
  3. シリアル番号 1 ~ 5 を使用してこのリストをユーザーに提示し、ユーザーの入力を求めます。
  4. ユーザーは 1 から 5 までの任意の数字を入力できます。それ以外の数字の場合は、エラーが表示されます。
  5. ユーザーキーが適切な数になると、このjarファイルがBからAにコピーされます

私はシェルスクリプトが初めてなので、少し遅くなります。私が学んだことは次のとおりです。

  • ボックスAからボックスBに接続するには、sshを使用します
  • シェル スクリプトからコマンドを実行しました: ssh user@host find -name 'prop*.jar'このコマンドにより、必要なファイルのリストが表示されました。
  • しかし、私がコマンドを試したとき:

ssh user@host find -name 'prop*.jar' -printf '%C@ %p\n' | 並べ替え -rn | 頭 -n 5

   エラーが表示されます- find: paths must before expression: %pn

どこが間違っているのですか。私はググって多くのバリエーションを試しましたが、シェルスクリプトはまだこのエラーをスローします. まだ試していないので、残りの手順については回答しません。しかし、確かに、このステップは私を消費しました。

編集: リモートボックスBからボックスAにコピーする方法を見つけました:

  • scp -o StrictHostKeyChecking=no [[user@]from-host:]source-file [[user@]to-host:][destination-file]

しかし、元の問題はまだ残っています....そこに助けがあれば:(

4

1 に答える 1

0

「検索」アプローチが機能した可能性があります。コマンド ラインの使用方法が間違っているだけです。最初の述語引数「-name」の前にディレクトリ パスがありません。

持っていた:

find -name 'prop*.jar' -printf '%C@ %p\n'

必要なもの:

find . -name 'prop*.jar' -printf '%C@ %p\n'

コメントで他の人が指摘したように、すべてを二重にエスケープする必要がある可能性があります。

于 2014-04-02T01:31:53.113 に答える