방금 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
$3
IFS