3

これを行う簡単な方法があると確信していますが、私はそれを見つけていません。私がやりたいのは、lftpを使用して一連のコマンドを実行することです。可能であれば、サーバーに繰り返し接続することは避けたいと思います。

基本的に、私はサーバー上にftpディレクトリでいっぱいのリストを含むファイルを持っています。サーバーに接続して、次のようなものを実行したい:(この時点で、catを使用してテキストファイルを行の配列に変換したと仮定します)

for f in "${myarray}"
do
cd $f;
nlist >> $f.txt;
cd ..;
done

もちろんそれはうまくいきませんが、私が達成しようとしていることには簡単な解決策があると想像する必要があります。

シェルスクリプトに関しては、私はかなり経験が浅いです。助言がありますか?

4

1 に答える 1

6

まず、lftpコマンドのリストを含む文字列を作成します。次に、lftpを呼び出し、標準入力でコマンドを渡します。Lftp自体は、シェルに似た構文でコマンドの出力をファイルにリダイレクトできます。

list_commands=""
for dir in "${myarray[@]}"; do
  list_commands="$list_commands
  cd \"$dir\"
  nlist >\"$dir.txt\"
  cd .."
done

lftp <<EOF
open -u $username,$password $site
$list_commands
bye
EOF

ディレクトリ名には円記号、一重引用符、またはグロブ文字が含まれていないと想定していることに注意してください。必要に応じて適切なエスケープを追加します。

ちなみに、ファイルから行を読み取るには、「なぜ」の代わりに「なぜこれほど頻繁に使用されるのか」を参照してください。while IFS= readIFS=; while read..。ディレクトリのリストからの読み取りとコマンドの作成を組み合わせることをお勧めします。

list_commands=""
while IFS= read -r dir; do
  list_commands="$list_commands
  cd \"$dir\"
  nlist >\"$dir.txt\"
  cd .."
done <directory_list.txt
于 2012-08-30T17:19:34.037 に答える