[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:29644] Re: Samba sjis file restore
- From: Taketoshi Sano <kgh12351@xxxxxxxxxxx>
- Subject: [debian-users:29644] Re: Samba sjis file restore
- Date: Sun, 26 Aug 2001 04:31:03 +0900
- X-dispatcher: imput version 991025(IM133)
- X-fingerprint: A1A0 F2D0 9C5D 7D61 DBA1 1507 D0B3 F3D0 AE31 C009
- X-ml-info: If you have a question, send e-mail with the body "help" (without quotes) to the address debian-users-ctl@debian.or.jp; help=<mailto:debian-users-ctl@debian.or.jp?body=help>
- X-ml-name: debian-users
- X-mlserver: fml [fml 3.0pl#17]; post only (only members can post)
- References: <3B845A5E.6060409@xxxxxxxxx>
- Message-id: <y5apu9kshwo.fsf@xxxxxxxxxxxxxxxxxxxx>
- X-mail-count: 29644
- User-agent: Semi-gnus/6.10.12 SEMI/1.12.1 ([JR] Nonoichi) FLIM/1.12.7 (Yþzaki) Emacs/20.7 (i386-debian-linux-gnu) MULE/4.0 (HANANOEN)
佐野@浜松です。
In <3B845A5E.6060409@xxxxxxxxx>,
on "Thu, 23 Aug 2001 10:19:53 +0900',
with "[debian-users:29618] Samba sjis file restore",
Tomoo Nmura <nomurat@xxxxxxxxx> さん wrote:
> Samba のファイル共有を、coding system = sjis で運用していました。
> バックアップを tar -cf /dev/nst0 * として取っていたのですが、復元で
> きずに困っています。
復元だけができないのですね ? そもそもアーカイブに入っていない
ということでは無く ?
(名前に "/" が入っている、というような話だと、そもそも
そうしたファイルを作成できないような気がするので、
tar でアーカイブすることも無理だろうな、と。)
sjis でやったことは無いのですが、cap で運用していて、ファイル名に
例えば ' (single quote) とか " (double quote) とかあるいはスペース
などが含まれているためにバックアップ (アーカイブの作成) 自体がうまく
いかない、という話は以前経験したことがあったような気がするんだけど、
別な話だったかな ?
その時はたしか find の -print0 オプションと xargs の -0 オプションを
使って対処したはずなのですが。
> あるsjis名のフォルダーを復元したいのですが、
>
> tar -xvf /dev/nst0 アイウエオ
>
> とすると、ファイル名のところにコントロールコードが入るのか、
> うまく行きません。
試しに sjis で「アイウエオ」という名前のディレクトリを作ってみましたが
別に問題無さそうです。
$ mkdir $(echo アイウエオ|nkf -s)
$ ls -lsaR|nkf
.:
合計 12
4 drwxrwxrwx 3 root root 4096 Aug 25 15:45 .
4 drwxrwxrwt 9 root root 4096 Aug 25 15:36 ..
4 drwxrwxr-x 2 sano sano 4096 Aug 25 15:45 アイウエオ
./アイウエオ:
ケ邱ラ 8
4 drwxrwxr-x 2 sano sano 4096 Aug 25 15:45 .
4 drwxrwxrwx 3 root root 4096 Aug 25 15:45 ..
$ touch $(echo アイウエオ|nkf -s)/$(echo これはファイルです。|nkf -s)
$ ls -lsaR|nkf -e
.:
合計 12
4 drwxrwxrwx 3 root root 4096 Aug 25 15:45 .
4 drwxrwxrwt 9 root root 4096 Aug 25 15:36 ..
4 drwxrwxr-x 2 sano sano 4096 Aug 25 15:46 アイウエオ
./アイウエオ:
ケ邱ラ 8
4 drwxrwxr-x 2 sano sano 4096 Aug 25 15:46 .
4 drwxrwxrwx 3 root root 4096 Aug 25 15:45 ..
0 -rw-rw-r-- 1 sano sano 0 Aug 25 15:46 これはファイルです。
$ tar -cvzf sjis.tgz ./$(echo アイウエオ|nkf -s)
./\203A\203C\203E\203G\203I/
./\203A\203C\203E\203G\203I/\202202202203t\203@\203C\203\213\202202201B
[pika] $ tar -tvzf sjis.tgz
drwxrwxr-x sano/sano 0 2001-08-25 15:46:00 ./\203A\203C\203E\203G\203I/
-rw-rw-r-- sano/sano 0 2001-08-25 15:46:00 ./\203A\203C\203E\203G\203I/\202202202203t\203@\203C\203\213\202202201B
[pika] $ mkdir check
[pika] $ cd check
[pika] $ tar -xvzf ../sjis.tgz
./\203A\203C\203E\203G\203I/
./\203A\203C\203E\203G\203I/\202202202203t\203@\203C\203\213\202202201B
[pika] $ ls -lsaR|nkf -e
.:
合計 12
4 drwxrwxr-x 3 sano sano 4096 Aug 25 15:46 .
4 drwxrwxrwx 4 root root 4096 Aug 25 15:46 ..
4 drwxrwxr-x 2 sano sano 4096 Aug 25 15:46 アイウエオ
./アイウエオ:
ケ邱ラ 8
4 drwxrwxr-x 2 sano sano 4096 Aug 25 15:46 .
4 drwxrwxr-x 3 sano sano 4096 Aug 25 15:46 ..
0 -rw-rw-r-- 1 sano sano 0 Aug 25 15:46 これはファイルです。
「問題が発生したファイル名」というのは「アイウエオ」ではなく
何か別なものですね。
例えば
tar -tvzf ./sjis.tgz |
perl -ne
'chomp; $name=$_; s/\\([0-7][0-7][0-7])/pack('c',oct($1))/ge;print $_ . "\n";'
|nkf -e
みたいにすれば sjis encoded なファイル名でもリストを取れると思いますが、
どれが「問題の発生する文字」なのか、特定できますか ?
drwxrwxr-x sano/sano 0 2001-08-25 16:25:17 アイウエオ/
-rw-rw-r-- sano/sano 0 2001-08-25 15:46:00 アイウエオ/これはファイルです。
-rw-rw-r-- sano/sano 16 2001-08-25 16:25:05 アイウエオ/試行錯誤、日々是精進
> しかたなく、全部復元しようと思い、
>
> tar -xvf /dev/nst0 *
>
> としたのですが、やはりあるファイルのところで、だんまりになります。
>
> tar -xvf /dev/nst0 \205k\201[........
>
> というふうにファイル名を指定するのかとも思ったのですが、
> これではだめなようです。
> sjis名のファイルを復元するには、どのように指定したらよいのでしょうか?
「あるファイル」という情報だけでは、どういう現象が起きているのか
わかりませんからこれではダメかもしれませんが、一応以下のような
ことは手元の potato では実行可能です。(上記で作成した tar file を
使用しています)
$ cat >filename01.txt (終了は Ctrl-D で)
./アイウエオ/これはファイルです。^@./アイウエオ^@ $
$ nkf -s filename01.txt >filename01.sjis
$ tar --null -T filename01.sjis -tvzf ../sjis.tgz
drwxrwxr-x sano/sano 0 2001-08-25 15:46:00 ./\203A\203C\203E\203G\203I/
-rw-rw-r-- sano/sano 0 2001-08-25 15:46:00 ./\203A\203C\203E\203G\203I/\202202202203t\203@\203C\203\213\202202201B
$ tar --null -T filename01.sjis -xvzf ../sjis.tgz
./\203A\203C\203E\203G\203I/
./\203A\203C\203E\203G\203I/\202202202203t\203@\203C\203\213\202202201B
$ ls -lsaR |nkf -e
.:
合計 28
4 drwxrwxr-x 3 sano sano 4096 Aug 25 16:20 .
4 drwxrwxrwx 4 root root 4096 Aug 25 15:46 ..
4 -rw-rw-r-- 1 sano sano 47 Aug 25 16:18 filename01.sjis
4 -rw-rw-r-- 1 sano sano 47 Aug 25 16:18 filename01.txt
4 -rw-rw-r-- 1 sano sano 47 Aug 25 16:19 filename02.sjis
4 -rw-rw-r-- 1 sano sano 47 Aug 25 16:19 filename02.txt
4 drwxrwxr-x 2 sano sano 4096 Aug 25 15:46 アイウエオ
./アイウエオ:
ケ邱ラ 8
4 drwxrwxr-x 2 sano sano 4096 Aug 25 15:46 .
4 drwxrwxr-x 3 sano sano 4096 Aug 25 16:20 ..
0 -rw-rw-r-- 1 sano sano 0 Aug 25 15:46 これはファイルです。
$ rm -rf $(echo アイウエオ|nkf -s)
$ ls -lsaR
.:
合計 24
4 drwxrwxr-x 2 sano sano 4096 Aug 25 16:21 .
4 drwxrwxrwx 4 root root 4096 Aug 25 15:46 ..
4 -rw-rw-r-- 1 sano sano 47 Aug 25 16:18 filename01.sjis
4 -rw-rw-r-- 1 sano sano 47 Aug 25 16:18 filename01.txt
4 -rw-rw-r-- 1 sano sano 47 Aug 25 16:19 filename02.sjis
4 -rw-rw-r-- 1 sano sano 47 Aug 25 16:19 filename02.txt
ここでちょっと面白いことに、ディレクトリ名とファイル名の順番を
逆にするとうまくいきませんね。
$ cat >filename02.txt
./アイウエオ^@./アイウエオ/これはファイルです。^@ $ hex filename02.txt
0x00000000: 2e 2f a5 a2 a5 a4 a5 a6 - a5 a8 a5 aa 00 2e 2f a5 ./アイウエオ@./ア
0x00000010: a2 a5 a4 a5 a6 a5 a8 a5 - aa 2f a4 b3 a4 ec a4 cf .イウエオ/これは
0x00000020: a5 d5 a5 a1 a5 a4 a5 eb - a4 c7 a4 b9 a1 a3 00 ファイルです。@
$ nkf -s filename02.txt >filename02.sjis
$ tar --null -T filename02.sjis -tvzf ../sjis.tgz
drwxrwxr-x sano/sano 0 2001-08-25 15:46:00 ./\203A\203C\203E\203G\203I/
-rw-rw-r-- sano/sano 0 2001-08-25 15:46:00 ./\203A\203C\203E\203G\203I/\202202202203t\203@\203C\203\213\202202201B
tar: ./\203A\203C\203E\203G\203I/\202202202203t\203@\203C\203\213\202202201B: 書庫中に見つかりません
tar: エラー終了が前のエラーから遅れました
これは最初の ./アイウエオ で ./アイウエオ 以下のファイルが展開されて
しまうためにそれ以降のファイルが見つからない、ということなんでしょうか。
他の例で試してみると、
$ tar -tvzf test.tgz test1/ test1/test2/test3
drwxrwxr-x sano/sano 0 2001-08-25 16:36:33 test1/
drwxrwxr-x sano/sano 0 2001-08-25 16:36:38 test1/test2/
-rw-rw-r-- sano/sano 0 2001-08-25 16:36:38 test1/test2/test3
tar: test1/test2/test3: 書庫中に見つかりません
tar: エラー終了が前のエラーから遅れました
$ tar -tvzf test.tgz test1/test2/test3 test1/
drwxrwxr-x sano/sano 0 2001-08-25 16:36:33 test1/
drwxrwxr-x sano/sano 0 2001-08-25 16:36:38 test1/test2/
-rw-rw-r-- sano/sano 0 2001-08-25 16:36:38 test1/test2/test3
別にファイル名のコードが ASCII でも同じ動作みたいですね。
--
# (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
<kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)