More from: コマンド

”Output file suffixes exhausted”が出た。

linux上でファイルを分割するのに”split”コマンドを使っていて、”Output file suffixes exhausted”というエラーが出た。
読んでの通りで出力ファイルの接尾語が使い尽くされたということで、デフォルトの接尾語(aa-zzの676種)では足りなくなった。
これを回避するには”-a”オプションで接尾語の文字数を指定すれば良いということ。
今回の場合はスクリプト内に”-a 3”を追記したので、これまで2文字だった接尾語が”aaa-zzz”の3文字(‭17,576‬種)になり、事実上接尾語が足りなくなることは無くなった。

←クリックしてくれると嬉しいです。

複数ファイル内の特定文字列の一括変換

Linuxで稼働させているサーバに置いてある特定のファイル群の内容を一部書き換える必要が生じた。
書き換える内容は特定の文字列を別の文字列に変換するだけなんだけど、なにせ書き換えが必要なファイルが数百個もある。
手作業で編集するには多すぎるので、なんか自動で出来ないかな?と思い調べてみると同じことを考える人はいるもので、ヒントどころか回答そのものがすぐに見つかった。
手順は一行のコマンド(実際にはパイプで接続した二つのコマンド)で非常に単純。
$grep -l ‘置換対象の文字列’ 置換対象のファイル群 | xargs sed -i.bak -e ‘s/置換対象の文字列/置換後の文字列/g’
要は書き換えが必要なファイルをgrepで探し出し、それをパイプでsedに渡すんだけど、その際にファイル名をパラメータで渡すためにxargsコマンドを使用している。
実際にやってみるとあっというまに数百個のファイルの編集が完了、いやぁ助かったなぁ(汗)。

←クリックしてくれると嬉しいです。

ftp接続でのpassive modeの切り方

ftpを使ってのデータのやりとりで、ファイアーウォール等では20番及び21番ポートを開けているにもかかわらず、何故かデータの送受信が出来ないことがある。
最初の接続及びユーザー名を使っての認証までは行えるのに、データを送る(もしくは受け取る)操作(getもしくはput)をしても
ftp: connect: Connection timed out
と出てしまい送受信が出来ない。
こんな時はPassive Modeになっているのではないだろうか?
実際私も職場と現場のサーバー同士でデータの送受信を行おうとして上手くいかなかったことがあり、そういう時は決まってPassive Modeになっていた。
Passive Modeで送受信する時は使われるポートがその時の環境で変化するために、場合によってはファイアーウォール等で閉じてあるポートを使うことになり、当然ながらパケットが通らずにタイムアウトを起こすことになる。
#Passive Modeの場合はlsコマンド等の結果が返ってくるポートも不定なので同様にタイムアウトを起こしてしまう。
この場合はPassive Modeをオフにすることでftpクライアントはデータ転送に20番ポートのみを使うようになるので、問題無くデータを送受信できるようになる。
Linux標準のftpクライアントでは
ftp>Passive off
としてやることでPassive Modeをオフにすることが出来る。
Windows用のクライアントソフトの場合はソフトにより設定の方法が異なるので、ここでは書かないけど、大抵はPassive Modeをオフにすることが出来る筈(Windows7のコマンドプロンプトで使えるftpクライアントではpassiveコマンドが無くて設定できなかった)。
接続もログインも出来るのにデータの送受信でタイムアウトになる場合はお試しあれ。

←クリックしてくれると嬉しいです。

スクリプトは書いたけど・・・・・・・・

データの移動の為に過去に転送した時以降に更新されたファイルをアーカイブするスクリプトを書いた。
きちんと動作することは確認できたのだけど、いざ実行するとかなり処理時間がかかってしまう、、、、、、、
これはfindコマンドが検索結果を毎回lhaに渡し、その度にlhaがアーカイブファイルのバックアップを取るためと思われる。
lhaに一括でファイル名を渡すことが出来ればバックアップを取らずに処理されるので、もっと処理速度を上げられる筈なのだがその手段が今のところ分からない。
なので、今日はこのままサーバに処理をさせたままにして引き上げることにした。
明日の朝には処理が終わっていることを期待しよう(汗)。

←クリックしてくれると嬉しいです。

正確には-fぢゃなかった(汗)

昨日からfindコマンドのオプションについて書いているけど、”-f”というオプションではなく、”-type”オプションに”f”というパラメータを渡すことで、ファイルのみの検索が可能になるということだった。
自分では-typeオプションを使っていながら、ここの記事に書くときに取り違えていたという・・・・・・・・
先の記事の使用例にもちゃんと”-type f”と書いているにも関わらずタイトルには”-f”オプションって書いている。
なにを勘違いして書いたかなぁ?

←クリックしてくれると嬉しいです。

名前が日付のフォルダを作る

デジカメ等の写真を複数のフォルダに入れて整理するのは沢山の人がやっていると思う。
その時のフォルダの名前をどうするかは人それぞれだろうけど、日付をフォルダ名に使うと言うのも一つの方法だと思う。
その際カレンダー等で日付を確認せずに自動でフォルダを作成するには
コマンドプロンプトで
md %DATE:/=%
を実行するとカレントディレクトリに当日の日付のフォルダが作成される。
いちいちコマンドプロンプトを起ちあげてコマンドを入力するのが面倒なら、フォルダを作りたいフォルダに「新規テキストファイル.txt」を作り、その中に「md %DATE:/=%」の一行だけを書いて「日付フォルダ作成.bat」とかいう名前(要は自分で判る名前)でバッチファイルとして保存し、そのファイルをダブルクリックすれば良い。
#フォルダオプションで「登録されている拡張子は表示しない」のチェックを外しておく必要がある。

フォルダオプション画面

WindowsXPのフォルダオプションの設定画面。赤線で囲った部分のチェックを外す。


このバッチファイルで作成されるフォルダ名は「20120310」のように年が西暦4桁になっている。
年の部分を西暦二桁にするには、先のバッチファイルの内容を以下のようにする。
set ymd=%DATE:/=%
set yymmdd=%ymd:~2%
md %yymmdd%
とすれば作られるフォルダ名は「120310」(今日3/10の場合)となる。
また、年の部分を和暦にしたい場合は
set ymd=%DATE:/=%
set /a yymmdd=%ymd%-19880000
md H%yymmdd%
とすれば作られるフォルダ名は「H240310」(今日3/10の場合)となる。

いちおうWindowsXPとWindows7での動作は確認済み。

←クリックしてくれると嬉しいです。

SQLのワイルドカード

SQLのwhere句でLIKE命令を使う時はワイルドカードを併用するが、このワイルドカードが実装によって異なるのは困ったもんだ。
UNIX系でよく使われる’*’(アスタリスク)の場合もあれば、’%’(パーセント)の場合もある。
職場のSQLサーバで使えるのがどちらか判らなくて迷ってしまった(汗)。
#ORACLEでは’%’なのね、、、、%がワイルドカードだなんてどっかのパソコンのOSみたい(笑)

←クリックしてくれると嬉しいです。