844) サブディレクトリを移動するコマンド らり 2003/11/10(月) 22:34 |
|
WindowsXPのコマンドプロンプトを使っているのですが、複数のサブディレクトリをファイルのmove ~*と同じように一度に移動させようとすると、構文が間違っています、と表示されます。何かいい方法ありませんか。 |
|
850) Re:サブディレクトリを移動するコマンド ふぇむ 2003/11/12(水) 15:00 |
|
>WindowsXPのコマンドプロンプトを使っているのですが、複数のサブディレクトリをファイルのmove ~*と同じように一度に移動させようとすると、構文が間違っています、と表示されます。何かいい方法ありませんか。 moveコマンドではそれはできなさそうですね。 手間なくやるには、XCOPY して成功したら元を消す、しかないような気が(実際何のツールを使っても実質はそういうことをやってるはずと思う)。Explorer上でマウスでやるなら簡単なんですけどね(これもコピーして元を消すとやっていると思う)。 |
|
870) Re:サブディレクトリを移動するコマンド Hellcat 2003/11/14(金) 23:05 |
|
>WindowsXPのコマンドプロンプトを使っているのですが、複数のサブディレクトリをファイルのmove ~*と同じように一度に移動させようとすると、構文が間違っています、と表示されます。何かいい方法ありませんか。 サブディレクトリーを有する複数のディレクトリーを一括して移動する場合 Unix like toolのmvコマンドで実現できるかもしれません。 とりあえず、手許にWinXPがないのでMS-DOS用のmvコマンドでテストしたところではOKでした。 WinXP用のmvコマンドは http://www.piedey.co.jp/softs/ntuxtl.html にありますので、トライしてみてらどうでしょうか。 例えば、以下のようなディレクトリー構造で E:\ ├─ABC │ ├─01HOGE │ │ └─HOGE_1 │ ├─02HOGE │ │ └─HOGE_2 │ ├─03HOGE │ │ └─HOGE_3 │ ├─HEMO │ ├─FOO │ └─BAZ └─XYZ ABCディレクトリー配下の先頭の2文字が数値のHOGEディレクトリー 01HOGE 02HOGE 03HOGE をワイルドカードを使ってE:\XYZディレクトリー配下へ移動する場合 mv E:\ABC\[0-9][0-9]HOGE E:\XYZ とします。 結果は以下の通りとなります。 E:\ ├─ABC │ ├─HEMO │ ├─FOO │ └─BAZ └─XYZ ├─01HOGE │ └─HOGE_1 ├─02HOGE │ └─HOGE_2 └─03HOGE └─HOGE_3 P.S. mv -v E:\ABC\[0-9][0-9]HOGE* E:\XYZ と-v スイッチを指定して実行状況を見ると mkdirコマンドとrmdirコマンドを組み合わせて実現していることが分かります。 |
|
871) Re2:サブディレクトリを移動するコマンド ふぇむ 2003/11/15(土) 00:00 |
|
>サブディレクトリーを有する複数のディレクトリーを一括して移動する場合 >Unix like toolのmvコマンドで実現できるかもしれません。 >とりあえず、手許にWinXPがないのでMS-DOS用のmvコマンドでテストしたところではOKでした。 UNIX の mv コマンドの実装って、同一パーティション内なら mv 先を link し元を unlink するだけで実態の移動を伴いませんが、別パーティションならコピーして元を消す、のではなかったでしたっけか。(ファイルシステムによって違うかもですが) |
|
873) Re3:サブディレクトリを移動するコマンド Hellcat 2003/11/15(土) 18:19 |
|
ディレクトリーの移動ツールについて改めてアップします。 WinXPは手許にないため、Win95でテストを行いました。 使用したツールはUnix like toolのmvコマンドです。 これはUXTL412F.TARに含まれているもので http://www.asahi-net.or.jp/~bi3t-aoym/nidetool.htm を参考にダウンロードし、テストしたものです。 このコマンドを使用するとディレクトリーの一括移動が可能です。 WinXP用のコマンドとしては http://www.piedey.co.jp/softs/ntuxtl.html にあるmvコマンドが使えるのではないかと思われます。 ここで言い訳(^^;; #870(私の発言)のmvコマンドはUnix like toolではありませんでした。 同名のコマンドが複数あったため、混同してしまいました。 <テスト結果> で、例えば次の様なディレクトリーがあったとします。 D:\ |---ABC ( Dir ) 3/11/15 15:23:12 | |---BAZ ( Dir ) 3/11/15 15:23:12 | | |---HOGE ( Dir ) 3/11/15 15:23:12 | | | |---01HOGE ( Dir ) 3/11/15 15:23:12 | | | |---02HOGE ( Dir ) 3/11/15 15:23:12 | | | |---HEMO ( Dir ) 3/11/15 15:23:12 | | |---FOO ( Dir ) 3/11/15 15:23:12 |---XYZ ( Dir ) 3/11/15 15:23:12 (その1) これを mv /abc /xyz とするとABCディレクトリー以下のディレクトリーがXYZの配下に移動します。 D:\ |---XYZ ( Dir ) 3/11/15 15:23:12 | |---ABC ( Dir ) 3/11/15 15:23:12 | | |---BAZ ( Dir ) 3/11/15 15:23:12 | | | |---HOGE ( Dir ) 3/11/15 15:23:12 | | | | |---01HOGE ( Dir ) 3/11/15 15:23:12 | | | | |---02HOGE ( Dir ) 3/11/15 15:23:12 | | | | |---HEMO ( Dir ) 3/11/15 15:23:12 | | | | |---FOO ( Dir ) 3/11/15 15:23:12 (その2) 次に mv /abc/baz /xyz とするとBAZディレクトリー以下のディレクトリーがXYZの配下に移動し、ABCディレクトリーは残されます。 D:\ |---ABC ( Dir ) 3/11/15 15:27:58 |---XYZ ( Dir ) 3/11/15 15:27:58 | |---BAZ ( Dir ) 3/11/15 15:27:58 | | |---HOGE ( Dir ) 3/11/15 15:27:58 | | | |---01HOGE ( Dir ) 3/11/15 15:27:58 | | | |---02HOGE ( Dir ) 3/11/15 15:27:58 | | | |---HEMO ( Dir ) 3/11/15 15:27:58 | | | |---FOO ( Dir ) 3/11/15 15:27:58 (その3) 次に mv /abc/*/*/0[12]* /xyz とすると、以下のようになりました。ディレクトリーに対するワイルドカードの展開も可能なようです。 D:\ |---ABC ( Dir ) 3/11/15 15:35:06 | |---BAZ ( Dir ) 3/11/15 15:35:06 | | |---HOGE ( Dir ) 3/11/15 15:35:06 | | | |---HEMO ( Dir ) 3/11/15 15:35:06 | | |---FOO ( Dir ) 3/11/15 15:35:06 |---XYZ ( Dir ) 3/11/15 15:35:06 | |---01HOGE ( Dir ) 3/11/15 15:35:06 | |---02HOGE ( Dir ) 3/11/15 15:35:06 長文失礼しました。 |
|
874) Re4:サブディレクトリを移動するコマンド Hellcat 2003/11/15(土) 18:26 |
|
#873で御紹介したmvコマンドのマニュアルの一部を参考までに転記しておきます。 >LFNサポート状況下では特例として、引数が2個であってかつ2つの引数が >同じ実体(通常ファイルあるいはディレクトリ)を表していれば、常に書 >式(1)と見なされて名前の変更ができる。これは、ファイル名の大文字小 >文字の付け替えに使える。例えばディレクトリAbCがあるとき、 > mv AbC aBc >でそのディレクトリの名前をaBcに変更できる。 >移動する場合、元のファイルの更新時刻は保存される。LFNサポート状況 >下では最終アクセス日付も保存される(この振る舞いはUNIXに揃えてある)。 >移動元と移動先は違うドライブにあってもよい。その場合には実際には >ファイルをコピーした後、元のファイルを削除することで移動を行う。 >また、移動対象ファイルがディレクトリであった場合には、ディレクト >リ下のファイル構造を保存したまま全ファイルを移動する。 |
|
876) Re5:サブディレクトリを移動するコマンド ふぇむ 2003/11/16(日) 02:20 |
|
>>例えばディレクトリAbCがあるとき、 >> mv AbC aBc >>でそのディレクトリの名前をaBcに変更できる。 ちょっと脱線かもしれませんが。 UNIX の mv で困るのは、ディレクトリの名前をリネームするのに使おうとしたとき、たとえば source という名前のディレクトリを target という名前に変更しようとして mv source target とした場合、target がなければ所望の通り名前が変わるんですが、もしも target という名前のディレクトが存在すると、リネームではなく丸ごとその下に移動してしまうということ、があります。 「target という名前のディレクトリはないはず」という思い込みで作ったジョブを、よく確認もせずに再RUNをさせてしまうと発生したりします。また、何らかのトラ ブルで mv が不完全となり(よく覚えていませんが、例えば移動できないファイルが混じっていたりすると止まりませんでしたっけ)中途半端に target ができてしまった後によく確認せずもう一度やろうとしたりした時とかも。 本来、失敗した場合はロールバックして元通りになることが保証されていればいいのですが、そこは怪しい。 一括して移動する系のコマンドにおいて中途半端な状況にて取り残されてしまうと、かなりあとが面倒になりますよね。特に、オリジナル側の削除をあとで一括 で消すならまだしも(UNIX の mv がどうだったか覚えていませんが)移動元の中に含む複数のディレクトリやファイルについて、1つづつ成功すると同時に順次消すような実装のされているもの だったりすると、泣き別れ状態になって結構厄介。(Windows の Explorer で SHIFT + マウス操作でフォルダ移動を行うとそうなりますよね~) なので、個人的にはですが、ディレクトリのリネームや移動を含む場合、環境チェックと分岐は必ず行います。また、特にパーティションをまたぐ可能性のある 移動に際しては、「何らかの理由で失敗した場合にロールバックしないかもしれないコマンド」はあまり信用せず、自らコピーし確認した後オリジナルを消す、 ようにしています。 |