Como usar o comando cp no script bash para copiar arquivos com espaços e $ caracteres? [duplicado]

1

Eu estou tentando copiar alguns arquivos com espaços e $ , @ símbolos em seus nomes de arquivo em um script bash, mas o script não consegue copiar os arquivos afirmando que não pode encontrar o arquivo. Eu posso ver que está tratando cada palavra separada por espaço no nome do arquivo como outro nome de arquivo, e é por isso que está falhando. A seguir está meu código:

cp "$TRX_SOURCE_PATH/*TRX*" $DEST_PATH

Erro:

cp: cannot stat '/pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/*TRX*': No such file or directory

Se eu fizer um ls , posso ver os nomes dos arquivos:

# 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  [email protected]
-rw-r--r--. 1 root root  856064 Jul 27 11:54 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root  856064 Jul 27 11:54 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root 1254400 Aug  1 04:43 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root 2770944 Aug  1 04:48 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root 1707008 Aug  1 04:57 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root 1204736 Aug  1 09:42 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root 1204736 Aug  1 09:44 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root 3048448 Aug  1 10:24 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root 1294336 Aug  1 10:40 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root 1153536 Aug  1 10:45 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root 1108992 Aug  1 11:20 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root 1108992 Aug  1 11:33 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root 1302016 Aug  1 11:48 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]
-rw-r--r--. 1 root root 1150976 Aug  1 11:57 /pmautomation/PM/Report_Output/CFBLOCKTRUMNG/2015-08-01/Bharti Blocked TRX Report  [email protected]

Esse diretório tem muitos arquivos e estou interessado em extrair apenas arquivos com os seguintes nomes:

Bharti Blocked TRX Report  [email protected]

onde o TN e os registros de data são alterados.

Como faço para corrigir isso para que o comando cp funcione no script bash ?

EDIT: Eu li a outra pergunta com o script engasgando em espaços em branco e caracteres especiais e descobri que eu posso usar aspas duplas para isso. Eu tentei, mas não vai funcionar. Além disso, o script também falha no seguinte comando:

cp: cannot stat '/pmautomation/PM/StaticUpload/20150801/2G_SITEDB_*.csv': No such file or directory

em que estes arquivos não têm espaços:

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
    
por Ankit Vashistha 02.08.2015 / 15:52

2 respostas

8

O glob deve ser deixado sem aspas para que seja tratado como um glob. As variáveis devem ser citadas:

cp -- "$TRX_SOURCE_PATH"/*TRX* "$DEST_PATH"
    
por 02.08.2015 / 16:53
0
#!/bin/bash

TRX_SOURCE_PATH='/src/path'
DEST_PATH='/your/dest'

cp $TRX_SOURCE_PATH/Bharti\ Blocked\ TRX\ Report\ \ Morning\$*@* $DEST_PATH

deve funcionar

    
por 02.08.2015 / 16:59