0

/tmp/files.txt次の構造で呼び出されるファイルがあります。

652083        8 -rw-r--r--    1 david            staff                1055 Mar 15  2012 ./Highstock-1.1.5/examples/scrollbar-disabled/index.htm
652088        0 drwxr-xr-x    3 david            staff                 102 May 31  2012 ./Highstock-1.1.5/examples/spline
652089        8 -rw-r--r--    1 david            staff                1087 Mar 15  2012 ./Highstock-1.1.5/examples/spline/index.htm
652074        0 drwxr-xr-x    3 david            staff                 102 May 31  2012 ./Highstock-1.1.5/examples/step-line
652075        8 -rw-r--r--    1 david            staff                1103 Mar 15  2012 ./Highstock-1.1.5/examples/step-line/index.htm

ファイル名 (列 9)、ファイルサイズ (列 7)、および last_modified (列 8) を mysql テーブルに挿入したいと考えていますpaths

行全体を挿入するには、次のようにします。

LOAD DATA INFILE '/tmp/files.txt' INTO TABLE path 

ここで必要な情報を必要な列に選択的に挿入するにはどうすればよいですか?

4

1 に答える 1

1

不要な値のターゲットとして、ダミーの MySQL ユーザー変数 (@dummy1 など) を指定します。

LOAD DATA INFILE '/tmp/files.txt'
INTO TABLE path 
(@d1, @d2, @d3, @d4, @d5, @d6, filesize, @mon, @day, @ccyy_or_hhmi, filename)
SET last_modified = CONCAT(@mon,' ',@day,' ',@ccyy_or_hhmi)

これにより、入力行の最初の 6 つの値が無視されます (値は指定されたユーザー変数に割り当てられますが、無視されます)。7 番目の値はfilesize列に割り当てられ、8 番目から 10 番目の値 (月、日、年 / time がユーザー変数に割り当てられ、次に 11 番目の値がfilename列に割り当てられます。

最後に、式を使用して月、日、年/時刻の値を連結し、last_modified列に割り当てます。(注: 結果の文字列が DATE または DATETIME 列への割り当てに適しているとは限りません。最後の値は年または時刻のいずれかになる可能性があるためです。)

(テーブルpathにはfilesize、last_modified、およびfilenameという名前の列があり、テーブルには設定する必要がある他の列はないと仮定しました。)


ファローアップ

-printfロードするデータが find コマンドの出力である場合、 ではなく findのアクションを使用したくなる-lsので、生成される出力を制御できます。例えば:

find . -type f -printf "%b\t%TY-%Tm-%Td %TH:%TM\t%p\n" >/tmp/myfiles.txt

これにより、タブで区切られた 3 つのフィールドが得られます。

size_in_blocks   modified_yyyy_mm_dd_hh_mi  filename

これを MySQL テーブルにロードするのは非常に簡単です。

LOAD DATA INFILE '/tmp/myfiles.txt'
INTO TABLE path
(filesize, last_modified, filename)
于 2013-01-28T23:08:03.280 に答える