Bash
如何在bash腳本中使用cp命令複製帶有空格和$字元的文件?
我正在嘗試在 bash 腳本中複製一些文件名中帶有空格和符號的文件
$
,@
但腳本無法複製文件,說明它找不到文件。我可以看到它將文件名中的每個空格分隔的單詞視為另一個文件名,這就是它失敗的原因。以下是我的程式碼:cp "$TRX_SOURCE_PATH/*TRX*" $DEST_PATH
錯誤:
cp: cannot stat `/pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/*TRX*': No such file or directory
如果我這樣做,
ls
我可以看到文件名:# ls -lrt /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/*TRX* -rw-r--r--. 1 root root 856064 Jul 27 11:54 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$UW@20150801.xls -rw-r--r--. 1 root root 856064 Jul 27 11:54 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$KK@20150801.xls -rw-r--r--. 1 root root 856064 Jul 27 11:54 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$HP@20150801.xls -rw-r--r--. 1 root root 1254400 Aug 1 04:43 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$AP@20150801.xls -rw-r--r--. 1 root root 2770944 Aug 1 04:48 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$DL@20150801.xls -rw-r--r--. 1 root root 1707008 Aug 1 04:57 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$UE@20150801.xls -rw-r--r--. 1 root root 1204736 Aug 1 09:42 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$AS@20150801.xls -rw-r--r--. 1 root root 1204736 Aug 1 09:44 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$NE@20150801.xls -rw-r--r--. 1 root root 3048448 Aug 1 10:24 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$RJ@20150801.xls -rw-r--r--. 1 root root 1294336 Aug 1 10:40 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$CH@20150801.xls -rw-r--r--. 1 root root 1153536 Aug 1 10:45 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$KL@20150801.xls -rw-r--r--. 1 root root 1108992 Aug 1 11:20 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$HR@20150801.xls -rw-r--r--. 1 root root 1108992 Aug 1 11:33 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$JK@20150801.xls -rw-r--r--. 1 root root 1302016 Aug 1 11:48 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$PB@20150801.xls -rw-r--r--. 1 root root 1150976 Aug 1 11:57 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report Morning$TN@20150801.xls
這個目錄有很多文件,我有興趣只提取具有以下名稱的文件:
Bharti Blocked TRX Report Morning$TN@20150801.xls
TN 和日期戳發生變化的地方。
如何解決此問題以使
cp
命令在bash
腳本中工作?編輯:我閱讀了另一個問題,腳本在空格和特殊字元上窒息,發現我可以使用雙引號。我已經嘗試過了,但它不起作用。此外,對於以下命令,該腳本也會失敗:
cp: cannot stat `/pmautomation/PM/StaticUpload/20150801/2G_SITEDB_*.csv': No such file or directory
其中這些文件中沒有任何空格:
ls -lrt /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_*.csv -rw-r--r--. 1 root root 4850694 Aug 2 06:51 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_KL.csv -rw-r--r--. 1 root root 4743676 Aug 2 06:55 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_PB.csv -rw-r--r--. 1 root root 2812108 Aug 2 07:05 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_AS.csv -rw-r--r--. 1 root root 1934089 Aug 2 07:15 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_CH.csv -rw-r--r--. 1 root root 2360597 Aug 2 07:30 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_JK.csv -rw-r--r--. 1 root root 1685844 Aug 2 07:35 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_NE.csv -rw-r--r--. 1 root root 8355408 Aug 2 07:47 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_TN.csv -rw-r--r--. 1 root root 8356293 Aug 2 07:51 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_UE.csv -rw-r--r--. 1 root root 3422073 Aug 2 11:04 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_DL.csv -rw-r--r--. 1 root root 6989514 Aug 2 17:34 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_RJ.csv -rw-r--r--. 1 root root 1276063 Aug 2 18:35 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_HP.csv -rw-r--r--. 1 root root 2585368 Aug 2 18:50 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_HR.csv -rw-r--r--. 1 root root 5975056 Aug 2 19:18 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_UW.csv -rw-r--r--. 1 root root 6558770 Aug 2 19:29 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_KK.csv -rw-r--r--. 1 root root 10222883 Aug 2 19:33 /pmautomation/PM/StaticUpload/20150801/2G_SITEDB_AP.csv
glob 必須不加引號才能被視為 glob。應引用變數:
cp -- "$TRX_SOURCE_PATH"/*TRX* "$DEST_PATH"
#!/bin/bash TRX_SOURCE_PATH='/src/path' DEST_PATH='/your/dest' cp $TRX_SOURCE_PATH/Bharti\ Blocked\ TRX\ Report\ \ Morning\$*@* $DEST_PATH
應該管用