쉘 스크립트에서 * 변수를 사용하여 폴더의 모든 파일 참조 [중복]

쉘 스크립트에서 * 변수를 사용하여 폴더의 모든 파일 참조 [중복]

방금 bash 스크립트를 작성하여 스크립트에서 일부 파일을 실행하려고 했습니다.

cp "myfolder/*.*" "otherfolder"

"myfolder/"에 대해 불평합니다.."찾을 수가 없어요. 그러면 좀 더 구체적으로 말하려고 노력해요.

cp "myfolder/*.ini" "otherfolder"

아직도 불평합니다.

그런 다음 시도했습니다.

cp "myfolder/${*}.ini" "otherfolder"

여전히 불평하는 것은 명령줄 인수에 .ini 접미사를 붙이는 것뿐입니다.

cp "myfolder/{*}.ini" "otherfolder"

아직도 성공하지 못했습니다. 그래서 각 파일의 전체 파일 이름을 입력하면 작동했습니다. 그러나 bash 파일에서 별표를 사용하여 디렉토리의 모든 파일을 참조하는 방법이 있습니까? 아니면 내가 뭘 잘못하고 있는지 누가 알 수 있나요?

감사해요.

답변1

파일 이름 글로빙 패턴을 인용하면 쉘은 해당 패턴을 확장하지 않습니다(이것이 이 작업을 수행하는 이유 중 하나입니다).하다일반적으로 참조 변수 확장이 필요하며, 특히 와일드카드 패턴으로 해석될 수 있는 값이 포함된 경우에는 더욱 그렇습니다.

바꾸다

cp "myfolder/*.*" "otherfolder"

당신은 사용해야합니다

cp "myfolder"/*.* "otherfolder"

그러면 이름에 점이 있는 모든 항목이 복사됩니다 myfolder( 디렉토리 이름이라고 otherfolder가정 ). otherfolder기본적으로 이 *패턴은 숨겨진 파일 이름과 일치하지 않으며 대부분의 쉘은 이 패턴을 유지합니다.확장되지 않은일치하는 파일 이름이 없는 경우.

마찬가지로 cp "myfolder/*.ini" "otherfolder"로 써야 합니다 cp "myfolder"/*.ini "otherfolder".

이것$* 바꾸다와일드카드 관점에서 보면 이야기가 다릅니다 *. 둘 사이에는 실제 상관관계가 없습니다. 문자열은 쉘 변수의 첫 번째 문자 (기본적으로 공백) 로 구분된 위치 변수("명령줄 인수", , , , ...) "$*"의 연결입니다 .$1$2$3IFS

관련 정보