한 폴더에서 다른 폴더로 파일을 이동하고 싶습니다.
파일 형식에 ( file _name.dat
) 사이에 공백이 있는 경우와 이 명령을 사용하면 mv file _name.dat /tmp
파일이 이동하지 않습니다.
하지만 을 사용하면 mv "file _name.dat" /tmp
파일이 이동합니다.
file _name.dat
자동으로 이동될 때 변경하는 데 도움이 되는 스크립트를 작성하도록 도와주세요 ."file _name.dat"
답변1
귀하의 질문은 이해하기 어렵습니다. 특히, 당신이 필요로하는코드를 복사하여 붙여넣으세요.그리고오류 메시지 복사하여 붙여넣기.
즉, 고전적인 실수를 저지르고 있을 가능성이 높습니다...
쉘 스크립트에 변수 대체(예: $file
또는 $1
)가 포함된 경우 확장 결과는 공백으로 구분된 일련의 와일드카드 패턴으로 처리됩니다. 변수는 단일 단어로 처리되지 않고 패턴 목록으로 처리됩니다. 그래서 당신이 쓴다면
mv $1 /tmp # <<<< BAD
그런 다음 을 실행하면 명령이 myscript "file _name.dat"
, 및 3개의 매개변수 를 mv
받습니다 file
. 실행하면 현재 디렉터리의 모든 파일이 이동됩니다._name.dat
/tmp
myscript "*.dat"
.dat
이를 방지하려면 큰따옴표 사이에 변수 대체를 입력하세요 mv "$1" /tmp
. 이렇게 하면 mv
항상 두 개의 인수, 즉 스크립트의 첫 번째 인수와 /tmp
. 변수 값을 와일드카드 패턴 목록으로 처리해야 하는 경우는 극히 드뭅니다. 따라서 다음과 같은 간단한 규칙을 기억하세요.
변수 대체에는 항상 큰따옴표를 사용하세요.:
"$foo"
,"$1"
기다리다. 이는 명령 대체에서도 작동합니다."$(mycommand)"
또한 파일 이름이 -
대시( )로 시작하는 경우 mv
옵션으로 간주됩니다. 이를 방지하려면 --
끝에 옵션을 전달하십시오. 그 이후의 모든 항목은 --
옵션이 아닌 인수(의 경우 파일 또는 디렉토리 이름 mv
)입니다. 대부분의 명령은 --
플래그로 끝나는 옵션을 인식합니다 .
mv -- "$1" /tmp
myscript file _name.dat /tmp
쉘에 스크립트를 작성하여 호출하려는 경우에는 불가능합니다. 스크립트는 인수를 개별적으로 수신하므로 명령줄에 공백을 몇 개 입력하는지 알 수 없습니다. (이것은 프로그램이 자체 인수를 구문 분석하는 Windows와 다릅니다. Unix에서 프로그램은 인수 목록을 받습니다.) 다른 쉘 스크립트에서 스크립트를 호출하는 경우 호출 스크립트에서도 올바른 따옴표를 사용하십시오.