cp 帶有一個包含萬用字元的參數
如果我有以下 2 個文件和 1 個文件夾:
someuser@computer:~/Desktop/test$ ls -l total 340 -rw-r--r-- 1 someuser someuser 45082 ago 5 09:56 file1.pdf -rw-r--r-- 1 someuser someuser 291836 ago 5 09:56 file2.pdf drwxrwxr-x 2 someuser someuser 4096 ago 5 09:56 this_is_a_folder.pdf
然後我執行以下命令(注意我省略了目的地):
cp *.pdf
file1.pdf
並file2.pdf
複製到this_is_a_folder.pdf
文件夾中。someuser@computer00:~/Desktop/test$ ls this_is_a_folder.pdf/ file1.pdf file2.pdf
顯然
cp file1.pdf file2.pdf this_is_a_folder.pdf
…和
this_is_a_folder.pdf
文件夾一樣,然後將兩個文件複製到其中。這是一個錯誤嗎?
這顯然是萬用字元擴展的副作用,這不是我所期望的。
我會預料到一個
missing destination file
錯誤。
這不是
cp
命令中的錯誤。當您輸入時cp *.pdf
,cp
永遠不會看到實際的萬用字元,因為萬用字元是由擴展的bash
,而不是擴展的cp
。如何cp
知道您只輸入了一個參數?這是 bash 萬用字元的副作用,不能稱為錯誤。
你似乎非常了解正在發生的事情。在您的範例中,
file1.pdf file2.pdf this_is_a_folder.pdf
. 我看不出你有什麼困惑。cp
正在做它應該做的事情,你告訴它複製file1.pdf
並file2.pdf
進入this_is_a_folder.pdf
,這正是它正在做的事情。沒有錯誤,它正在像宣傳的那樣工作。由於您的文件夾名稱以 結尾
cp
因此將文件複製到其中。要獲得您期望的行為,您需要保護萬用字元免受 shell 的影響,以便在cp
看到它之前不會對其進行擴展:$ cp "*pdf" cp: missing destination file operand after `*pdf' Try `cp --help' for more information.
請注意,在這種情況下,萬用字元沒有展開,因此
cp
實際上是在尋找一個名為cp "*.pdf" foo/
) 來呼叫它,它也會抱怨cannot stat '*.pdf': No such file or directory
.cp *pdf
如果您嘗試在僅包含一個文件的目錄中嘗試,您還將看到預期的行為,$ ls -l total 0 -rw-r--r-- 1 terdon terdon 0 Aug 5 16:56 file1.pdf $ cp *pdf cp: missing destination file operand after `file1.pdf' Try `cp --help' for more information.
還與此進行比較:
$ ls -l total 0 drwxr-xr-x 1 terdon terdon 0 Aug 5 16:56 a_folder.pdf -rw-r--r-- 1 terdon terdon 0 Aug 5 16:56 file1.pdf -rw-r--r-- 1 terdon terdon 0 Aug 5 16:56 file2.pdf $ cp *pdf cp: target `file2.pdf' is not a directory
在這裡,由於文件夾的名稱以 , 開頭
a
,a_folder.pdf file1.pdf file2.pdf
。因此,cp
實際執行的命令是cp a_folder.pdf file1.pdf file2.pdf
由於最後一個參數不是目錄,因此返回錯誤。