綾小路龍之介の素人思考

[linux] mvで同じファイル名のファイルを移動させないためには-nオプション

mvは同じファイル名のファイルを無条件で上書きする。これを抑制するにはmv -iのように同じファイル名のファイルが有った場合に尋ねるオプションが有る。これに対して自動的に'NO'を答えさせるため--replyオプションがあった。--replyオプションは現在はdeprecatedになっているのだけど、その代わりに-n, --no-clobberオプションが有る。これは同じファイル名があった場合に、移動元にそのファイルを残すというオプションである。

例えば以下の様な場合を考える。

$ ls a/ b/
a/:
text2.txt  text.txt

b/:
text2.txt  text.txt

この時a/に含まれる内容をb/に移すと問答無用に上書きされるので、-iを使う。こうすることで上書き確認メッセージが表示される。

$ mv -i a/* b/
mv: overwrite `b/text2.txt'? n
mv: overwrite `b/text.txt'? n

基本的ポリシーとして、同じファイル名のファイルは上書きしないとすれば、この質問にいちいち答えるのは効率的でない。そんな場合に-nオプションを使う。なにも表示されないが、移動されていない事がわかる。

$ mv -n a/* b/
$ ls a/ b/
a/:
text2.txt  text.txt

b/:
text2.txt  text.txt

リファレンス

  1. Re: Deprecating mv's --reply={yes,no,query} option
  2. GNU Core Utilities Frequently Asked Questions
  3. Re: Bug#160849: coreutils: bug report for GNU Core Utils
  4. FYI: deprecating mv --reply=X and cp --reply=X
  5. mv "--no-clobber" - Google 検索
  6. Man page of MV

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2010-08-15T16:39:45+09:00
  2. Modified: 2010-08-15T16:39:45+09:00
  3. Generated: 2017-04-14T23:09:17+09:00