Archive for the ‘bash’ Category

terminal

つまりtmuxの入れ子ですね

tmuxの入れ子で検索すると出てきたのかもしれませんが、”tmux ssh 接続先 プレフィクス”とかで検索しても出てこなかったので書いておこうと思います。

たぶん、知ってしまうと簡単すぎて記すきにもなれないのだと思います。

はい、答えはプレフィクスキーを2回押すです。

例えば私はプレフィクスキーをctrl+jに設定しているのですが、SSH接続先のtmuxにプレフィックスキーを送るには

ctrl+jjと押すという事ですね。

よく出来てるなあtmux

terminal

送信

-P #portNumber

scp -Pxxx filename name@hostname :~/

ポート番号指定のオプションは小文字でなく大文字の-Pである。

コロン以下に転送先ホストのディレクトリを指定できる。

例ではfilenameをリモートサーバーのホームディレクトリに転送している。

受信の場合

scp -Pxxx name@hostname:/home/name/Desktop/hoge.txt ./

例ではリモートサーバー側デスクトップのhoge.txtをローカルサーバーのカレントディレクトリに送っている。

また、ファイルだけでなくディレクトリごと送受信するには、オプション -r を足してディレクトリ名を指定する。

terminal

たとえばあるディレクトリの中に

text1.txt,text2.txt,text3.text,,,text30.txt

と30のファイルがあったとして、それらのファイルの全ての末尾に”hogehoge”と書き込みたい場合。

わたしはこう書きました

find ./ -type f | xargs -I@ echo "hogehoge" >> @

できたかなーと、ファイルの中をみてみると空でした。

かわりに、@というファイルが増えており、その中に30行のhogehogeが追記されていました。

なんじゃこりゃということで、Linuxマスターに尋ねてみると、どうやら |(パイプ)や >>(追記リダイレクト)の記号はそれの以前と以後でコマンドの影響範囲が異なるという事なんですね。

| xargs -I@ echo "hogehoge" >> @

は正しく認識されておらず、>>を介してしまったために@の置換が上手くいっていなかったということです。

ということで、上でやろうとしたことを正しく実行させるにはこうした方がよさそうです。

for n in $(find ./ -type f); do echo "hogehoge" > $n; done

findをコマンド置換によってforに投げて、1ファイル適宜hogehogeを追記するわけですね〜。

シェルスクリプトをわざわざ書くまでもなく、すっきりしました。