유닉스 : 대시로 시작하는 파일,-


19

좋아, 대시로 시작하는 많은 파일이 있습니다-. 어느 것이 좋지 않은데 ... 이름을 바꾸고 싶습니다. 내 특별한 경우에 나는 그들 앞에 캐릭터를 넣고 싶습니다.

작동 해야하는 다음 줄을 찾았지만 대시로 인해 작동하지 않습니다.

for file in -N*.ext; do mv $file x$file; done

내가 넣을 경우 echo의 앞에 mv나는 한 무리를 얻을 수

mv -N1.ext x-f1.ext
mv -N2.ext x-f2.ext

물론 첫 번째 파일 이름은 옵션이라고 생각할 것입니다. 그래서 내가 제거 echo하고 실행할 때 나는 단지 많은 무리를 얻습니다.

mv: illegal option -- N

나는 그것을 바꾸려고 노력했다.

for file in -N*.ext; do mv "$file" "x$file"; done

그러나 따옴표는 무시되는 것 같습니다. 작은 따옴표를 사용하려고했지만 변수가 확장되지 않았습니다 ... 여기서 어떻게해야합니까?

업데이트 : 이제 인용문을 인용하려고했습니다. 이처럼 :

for file in -N*.ext; do mv '"'$file'"' '"'x$file'"'; done

그리고 그것을 반향 할 때, 그것은 정확 해 보이지만, 실제로 그것을 실행할 때 나는 단지

mv: rename "-N1.ext" to "x-n1.ext":: No such file or directory

나는 지금 이것을하는 방법에 대한 단서가 없다 ... 한숨


답변:


28

당신은 키워드를 사용할 필요가 --알려 MV의 인수가 옵션으로 해석되지 않도록 명령을 사용합니다. 손목 시계:

$ mv -N1.ext x-f1.ext
mv: invalid option -- N
Try `mv --help' for more information.

$ mv -- -N1.ext x-f1.ext
$ ls
x-f1.ext

명령 행에서 모든 옵션 -- 뒤에 사용하십시오 . 당신이 사용하려는 경우 예를 들면, -i에 옵션 MV를 , 그것은 갈 것 전에 -- :

mv -i -- -filename-begins-with-dash newfilename

6
아아 그것에 대해 전혀 생각하지 않았습니다. ./그동안 파일 이름 앞에 붙일 수 있다는 것을 알았습니다 . 그러나 이것은 물론 더 깔끔한 옵션입니다 :)
Svish

@ Svish : 그것은 공평합니다. 나는 파일 이름 앞에 ./둘 중 하나를 생각하지 않았습니다 . 그러나이 상황에서도 맞습니다.
quick quixote

7
--옵션은 관례이며 모든 프로그램에서 존중하는 것은 아니기 때문에 의미가 추가 인수를 처리하지는 않습니다. 어떤 사람들 -은 그것을 위해 고독 을 사용 하고 어떤 사람들은 그 목적을 위해 아무것도 받아들이지 않습니다 . 따라서 선행 ./을 염두에 두어야합니다.
dmckee

@dmckee가 맞습니다. --특별한 주장으로 GNU 확장이 있지만 POSIX 지침에 언급되어 있습니다. 12.2 절, 지침 10 : opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html ...을 참조하십시오 . 이는 대부분의 POSIX 및 GNU 유틸리티가이 규칙을 준수 할 것으로 예상 할 수 있지만, 그렇지 않을 수도 있음을 의미합니다.
quck quixote

6

다른 기술은 파일 이름을 가진 상위 디렉토리를 포함시키는 것입니다 ...

'-file-to-rename'파일의 이름을 'file-to-rename'으로 바꾸려면 ...

mv  ../parent-dir/-file-to-rename  file-to-rename

@Skippy le Grand Gourou에게 감사합니다. ./-file-to-rename 이 ...에서 mvrm같이 작동하는지 확인 했습니다 ...

mv  ./-file-to-rename  ./--file-to-rename

rm  ./-file-to-rename

1
또는 quixote의 대답에 대한 주석에서 이미 언급했듯이을 사용하는 것이 ./좋습니다.
Skippy le Grand Gourou
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.