LoginSignup
10
3

More than 5 years have passed since last update.

mvコマンドでワイルドカード使ってるときの挙動の話。

Posted at

業務でサーバのファイルを移動しようとmvコマンドを使った時の話。

以下のコマンドを実行したかったのに誤って

$ mv *.hoge ~

これで実行してしまった。

$ mv *.hoge

この時。*.hogeに該当するファイルは以下の2つ

$ ls *.hoge
test_1.hoge  test_2.hoge
$
$ cat test_1.hoge
111111
$
$ cat test_2.hoge
2222222

すると以下のように。

$ ls *.hoge
test_2.hoge
$
$ cat test_2.hoge
111111

幸い、問題ないファイルだったので良かったのですが
ちょっと挙動に興味が出てきたので実験。

さきほどと同じ2つのファイルを用意し、3つ目のファイルを追加。

$ ls *.hoge
test_1.hoge  test_2.hoge  test_3.hoge
$
$ cat test_1.hoge
111111
$
$ cat test_2.hoge
2222222
$
$ cat test_3.hoge
333333

この状態でさきほどのコマンドを実行

$ mv *.hoge
mv: target `test_3.hoge' is not a directory

test_3.hogeはディレクトリちゃうぞと。

ここで↓をたまたま発見。
http://d.hatena.ne.jp/m-hiyama/20081211/1228976433

Unixでは、ワイルドカード展開をシェルがするので、cp foo/* bar は、cp foo/a.txt foo/b.txt bar と同じです。

つまり*.hogeに該当したファイルがたまたま2つあった故に後者を移動先とみなして
以下が成立した。

$ mv test_1.hoge test_2.hoge

*.hogeに該当したファイルが3つ以上あると

mv test_1.hoge test_2.hoge test_3.hoge

となり、この場合は最後の引数がディレクトリであれば成立するようだ。
test_3.hoge配下にtest_1.hogetest_2.hogeを移動しようとしたためエラーが出た。
(てかmvって引数3つ以上でも可能なパターンあったんだ)

というちょっとしたメモ。

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3