2013-02-26 84 views
4

當我發出命令「mv file1 * .file1」是做什麼的?

mv file1 *.file1 
在文件1所在的目錄

,它就會消失。它最終在哪裏?我知道*是在文件名中的有效字符在Linux下,我應該已經逃出*性格有像

mv file1 \*.file1 

預期的結果,但如果沒有逃脫它,在那裏它被移到?

+3

這取決於什麼水珠'* .file1'匹配。 – Johnsyweb 2013-02-26 13:28:42

+1

你使用什麼發行版?當我在Ubuntu LTS上嘗試這個時,它就像我逃過'*'一樣。 – 2013-02-26 13:31:20

+0

沒有我認爲'*'擴展到目錄內容並且沒有文件可以創建。它報告錯誤嗎?你觀察到了什麼? – 2013-02-26 13:31:23

回答

8

mv file1 *.file1結果取決於如果*.file1比賽沒有什麼是*.file1

  • 匹配,則file1被重命名爲*.file1
  • 如果*.file1匹配一個文件,然後file1被重命名爲名稱匹配的文件和匹配的文件丟失。
  • 如果*.file1剛好匹配一個文件,並且該文件是一個目錄,那麼將file1移動到匹配的目錄。
  • 如果*.file1匹配多個文件,匹配的最後一個文件是一個目錄,然後file1,所有匹配的文件(本目錄除外)都將被移動到目錄。
  • 如果*.file1匹配多個文件,並且匹配的最後一個文件不是目錄,則mv將失敗並顯示錯誤。

見下面的實驗:

$ cat /etc/*-release 
DISTRIB_ID=Ubuntu 
DISTRIB_RELEASE=12.04 
DISTRIB_CODENAME=precise 
DISTRIB_DESCRIPTION="Ubuntu 12.04.2 LTS" 
NAME="Ubuntu" 
VERSION="12.04.2 LTS, Precise Pangolin" 
ID=ubuntu 
ID_LIKE=debian 
PRETTY_NAME="Ubuntu precise (12.04.2 LTS)" 
VERSION_ID="12.04" 
$ ls 
$ touch file1 
$ ls 
file1 
$ mv file1 *.file1 
$ ls 
*.file1 
$ touch file1 
$ ls 
file1 *.file1 
$ mv file1 *.file1 
$ ls 
*.file1 
$ touch 1.file1 
$ touch file1 
$ mv file1 *.file1 
mv: target `*.file1' is not a directory 
$ ls 
1.file1  file1  *.file1 
$ mkdir z.file1 
$ mv file1 *.file1 
$ ls z.file1/ 
1.file1  file1  *.file1 
+0

感謝您的詳細解答。因爲我沒有收到錯誤,並且該文件不在mv後面,所以應該在您建議的最後匹配的目錄中。我如何知道該目錄是什麼? – marekful 2013-02-26 13:57:33

+0

「echo * .file1」會顯示給你。看看行結束返回 – 2013-02-26 13:59:24

+0

感謝你們所有人的幫助! – marekful 2013-02-26 14:03:32

相關問題