題 如何在Linux中將名稱中帶有$(美元符號)的文件從一個文件夾複製到另一個文件夾?


我有一個文件,我想從一個目錄複製到另一個目錄。

假設那是文件 some.txt 從folder1複製到folder2

cp -r some.txt /folder2

我能夠複製此文件,但如果文件名以 $ 喜歡 $somefile.class 然後我無法複製文件,只是獲取文件不存在錯誤

cp -r $somefile.class /folder2

4
2018-06-07 08:22


起源




答案:


首先,你不需要 -r 旗幟是(來自 man cp):

-R-r--recursive
  以遞歸方式複制目錄

這僅在復制整個目錄及其內容時有用。然後,每當您的文件名包含奇怪的字符時,您需要轉義它們或使用單引號保護它們,因為其他答案已經建議:

cp '$somefile.class' /folder2
cp \$somefile.class /folder2

或者,您可以使用shell的glob擴展功能來複製文件:

cp ?somefile.class /folder2
cp *somefile.class /folder2

? 匹配“任何單個字符”和 * 匹配“0個或更多字符”。因此,使用這些globs將允許您複製目標文件而不必擔心名稱。但是,請記住,你應該仔細使用它,並確保全球 只要 匹配您要復制的文件。例如,我使用的那些也匹配 Lsomefile.class


15
2018-06-07 13:37





你需要 逃逸 任何帶反斜杠的特殊字符 \

cp -r \$somefile.class /folder2

了解更多 逃逸 這裡:

在sh腳本中使用sed時我需要逃脫哪些角色?


9
2018-06-07 08:50





$ character用於表示shell變量。如果你的文件真的開始 $ 您應該使用單引號來防止shell嘗試將其作為變量進行評估:

cp -r '$somefile.class' /folder2

8
2018-06-07 08:25





在特殊字符的情況下,這些解決方案都不適用於我 - 在前面。在這種情況下,唯一對我有用的是將當前目錄放在前面,如下所示:

cp -r './-somefile.class' /folder2

雖然不是 $ 標誌,它是一個特殊的角色,它可能會幫助其他人。其他解決方案不起作用,例如在文件名之前放置\或單個或雙重強調。


0
2018-06-01 16:47



這與此無關。這是其他各種問題的重複 以短劃線開頭的文件, 創建一個名稱以“ - ”開頭的文件(連字符a.k.a.破折號或減號)?, 如何cd到一個名為“-2”的目錄(以連字符開頭)?, 如何處理以連字符( - )字符開頭的文件名?, 創建一個名為命令行參數的文件? - phuclv