bash 스크립트에서 cp 여러 파일이 작동하지 않습니다.

bash 스크립트에서 cp 여러 파일이 작동하지 않습니다.

Bash 스크립트에서 다음 명령을 실행하고 싶지만 작동하지 않습니다.

주문하다:

cp /tmp/first/{abc.conf,xyz.conf} /tmp/backup/

배시 스크립트:

firstDir=/tmp/first
#secondDir=/tmp/second
validDir=$firstDir
#validDir=$secondDir
backupDir=/tmp/backup

files='{abc.conf,xyz.conf}'

join=$firstDir/$files
#join=$secondDir/$files

cp $join $backupDir
exit 0
rm -rf $validDir
mkdir $validDir

cp ("$backupDir/*.conf") $validDir

실수:

cp: cannot stat '/tmp/first/{abc.conf,xyz.conf}': No such file or directory

목표는 디렉터리를 정리하고 이 2개의 파일만 다시 넣는 것입니다.

답변1

지원 확장발생하다앞으로매개변수가 확장되었으므로

files='{abc.conf,xyz.conf}'
join=$firstDir/$files

결과는 실제로 변수를 로 설정하며 /tmp/first/{abc.conf,xyz.conf}명령에서 확장할 때 다시 처리되지 않습니다 cp.

대신에 다음과 같이 쓸 수 있습니다.

cp "$firstDir"/{abc.conf,xyz.conf} "$backupDir"

문자 그대로 원하는 방식으로 확장됩니다.

변수에 대해 중괄호 확장을 강제로 수행할 수 있는 방법은 없지만 배열을 사용하여 파일 이름과 명령을 분리하거나 중괄호 확장을 사용하여 정의할 수도 있습니다.

files=( "$firstDir"/{abc.conf,xyz.conf} )

그 다음에 ${files[@]}.

관련 정보