これが私がしたことです:
ファイルのリストを含むabc.txtという名前のファイルがあります。私はabc.txtを使ってこれらのファイルをフォルダに移動し、フォルダをtar処理し、最後にGNU / Linuxを実行しているサーバーから自分のローカルPCにtarをダウンロードしました。
リスト形式の手順は次のとおりです。
- abc.txt
- abc.txt(表示されたファイル) - >フォルダ
- フォルダ->Folder.tar
- フォルダ.tar - >ローカルPC。
abc.txtに2つのファイルが含まれている場合は、次のようになります。
example1.css
example2.css
abc.txtからローカルPCにこのファイルを個別にダウンロードする必要があります。
ftpまたはsftpをダウンロードするにはファイル名が必要なので、abc.txtからファイル名をどのように読みますか?
答え1
ファイルにabc.txt
以下に関連するファイル名のリストが含まれている場合/path/to/base
:
ssh user@server tar c -T /path/to/abc.txt -C /path/to/base | (cd /tmp; tar xv)
これは実際にどこにも保存せずに動的にタールボールを作成し、それをローカルシェルにパイプして抽出し、リストされたファイルを効果的にコピーします。
追加のヒント
ファイルにabc.txt
絶対パスのリストが含まれている場合:
ssh user@server tar c -T /path/to/abc.txt | (cd /tmp; tar xv)
ファイルがabc.txt
リモートシステムではなくローカルシステムにある場合:
ssh user@server tar c -T- < /path/to/abc.txt | (cd /tmp; tar xv)
圧縮を使用するにはgzip
(デフォルトレベル6を使用):
ssh -C user@server tar c -T /path/to/abc.txt | (cd /tmp; tar xv)
gzip
圧縮レベル9を使用するには:
ssh user@server 'tar c -T /path/to/abc.txt | gzip -9' | (cd /tmp; tar zxv)
答え2
以下は、名前にスペースが含まれているファイルに対して機能する簡単なスクリプトです。
SAVEIFS=$IFS; IFS=$(echo -en "\n\b") ; for elt in `cat abc.txt` ; do scp $elt <YOUR_SFTP_CONNECTION> ; done ; IFS=$SAVEIFS
答え3
あなたの質問の鍵は、リストから次の2つの論理パスの正しいファイルを抽出する方法だと思います。
egrep 'example1.css|example2.css' abc.txt
例外に一致するすべての行を提供し、
egrep -v 'example1.css|example2.css' abc.txt
例外と一致しないすべての行を提供します