![Bash 스크립트에서 여러 파일을 복사하는 방법](https://linux55.com/image/188516/Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EC%97%AC%EB%9F%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%B3%B5%EC%82%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
bash 스크립트나 쉘에서 여러 파일을 복사하는 방법을 알고 싶습니다. 내 말은
cp /path/to/source/{file1,file2,file3} /path/to/dest
그리고
scp /path/to/source/{file1,file2,file3} user@host:/path/to/dest
잘 작동하겠지만, 예를 들어
#!/bin/sh
scp /path/to/source/{file1,file2,file3} user@host:/path/to/dest
다음과 같은 오류가 발생합니다.
/path/to/source/{file1,file2,file3}: No such file or directory
단일 파일을 복사하거나 셸 복사하는 경우 작동하므로 문제는 여러 파일입니다. 모든 파일 에 사용하고 싶지만 모두 복사하고 싶지 않은 경우 *
에도 작동합니다 . 두 폴더에 이름은 같지만 내용이 다른 파일이 있기 때문에 선택한 파일만 복사해야 합니다. 따라서 모든 파일을 복사한 다음 원하지 않는 파일을 삭제하는 것은 작동하지 않습니다.
다음을 더 잘 이해하려면:
#!/bin/sh
scp /path/to/source/file1 user@host:/path/to/dest
또한 다음과 같습니다.
#!/bin/sh
scp /path/to/source/* user@host:/path/to/dest
따라서 이것은 { ... }
터미널 내에서 실행될 여러 파일을 올바르게 사용하는 것과 관련이 있지만 bash 스크립트를 실행하는 경우에는 그렇지 않습니다.
미리 감사드립니다.
//편집하다:
cp를 사용하려고 하면 오류가 발생합니다.
cp: cannot stat '/path/to/source/{file1,file2,file3}': No such file or directory
답변1
귀하의 스크립트 는 대신 #!/bin/sh
실행될 것임을 의미 합니다 . Ubuntu와 같은 많은 Debian 파생 제품에서 이는 기본 POSIX 쉘에 대한 기호 링크입니다 . 사용 중인 중괄호 확장은 다음에서 지원되지 않습니다 .sh
bash
/bin/sh
dash
dash
$ dash
$ echo {foo,bar}
{foo,bar}
이는 명령이 cp /path/to/source/{file1,file2,file3} /path/to/dest
이라는 이름의 항목을 찾고 있음 을 의미합니다 {file1,file2,file3}
. 간단한 해결책은 bash
대체를 사용하는 것입니다. shebang 줄을 에서 으로 변경 #!/bin/sh
하십시오 #!/bin/bash
.