권한을 변경하여 쉘 스크립트에서 한 폴더에서 다른 폴더로 파일을 이동하는 방법

권한을 변경하여 쉘 스크립트에서 한 폴더에서 다른 폴더로 파일을 이동하는 방법

한 폴더에서 다른 폴더로 파일을 이동하고 싶습니다.

파일 형식에 ( 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/tmpmyscript "*.dat".dat

이를 방지하려면 큰따옴표 사이에 변수 대체를 입력하세요 mv "$1" /tmp. 이렇게 하면 mv항상 두 개의 인수, 즉 스크립트의 첫 번째 인수와 /tmp. 변수 값을 와일드카드 패턴 목록으로 처리해야 하는 경우는 극히 드뭅니다. 따라서 다음과 같은 간단한 규칙을 기억하세요.

변수 대체에는 항상 큰따옴표를 사용하세요.: "$foo", "$1"기다리다. 이는 명령 대체에서도 작동합니다."$(mycommand)"

또한 파일 이름이 -대시( )로 시작하는 경우 mv옵션으로 간주됩니다. 이를 방지하려면 --끝에 옵션을 전달하십시오. 그 이후의 모든 항목은 --옵션이 아닌 인수(의 경우 파일 또는 디렉토리 이름 mv)입니다. 대부분의 명령은 --플래그로 끝나는 옵션을 인식합니다 .

mv -- "$1" /tmp

myscript file _name.dat /tmp쉘에 스크립트를 작성하여 호출하려는 경우에는 불가능합니다. 스크립트는 인수를 개별적으로 수신하므로 명령줄에 공백을 몇 개 입력하는지 알 수 없습니다. (이것은 프로그램이 자체 인수를 구문 분석하는 Windows와 다릅니다. Unix에서 프로그램은 인수 목록을 받습니다.) 다른 쉘 스크립트에서 스크립트를 호출하는 경우 호출 스크립트에서도 올바른 따옴표를 사용하십시오.

관련 정보