명령 행 인수와 같은 이름의 파일을 작성하는 방법은 무엇입니까?


29

플래그라는 파일을 만드는 방법이 궁금합니다. 예를 들어이라는 폴더를 만들려면 -a어떤 명령을 사용합니까?

나는 노력 mkdir '-a', mkdir \-a그리고 어느 쪽도 일했다. 우분투에 있습니다.


13
여기에 대한 답변은 모두 훌륭하지만, 이것을하고 싶은 트롤이 아닌 이유를 생각할 수 없습니다 ...
evilsoup

@evilsoup 어떤 사람들은 폴더를 접두사로하여 알파벳 순으로 정렬 된 목록에서 맨 위에 붙어 있습니다. 하지만 이것이 제가 생각할 수있는 유일한 이유입니다.
slhck

@slhck 저는 적어도 하나의 비디오 편집 과정을 알고 있으며 학생들이 프로젝트 디렉토리에 빈 공간을 추가하여 공동 iMac의 맨 위에 표시되도록 권장합니다. 이것은 추악하고
재미난

3
대부분 이것은 학문적 관심을 끌기위한 것입니다.
MYV

답변:


49

다음과 같이 명령을 호출하십시오.

mkdir -- -a

--(가) 그래서 수단은 옵션, 그 후 종료 있음 -a을 옵션으로 문자 그대로가 아니라 해석됩니다 mkdir. 당신은에서뿐만 아니라이 구문을 찾을 수 mkdir있지만 제외한 모든 POSIX 호환 유틸리티 echotest. 사양에서 :

인수-옵션의 끝을 나타내는 구분 기호로 받아 들여야합니다. 다음 인수는 '-'문자로 시작하더라도 피연산자로 취급되어야합니다. -인수는 옵션 또는 피연산자로 사용해서는 안됩니다.

사용 --안전 장치는 파일 이름을 처리하고 있는지 그들이 명령을 아프게하지 않습니다 만들고 싶어 거의 모든 행동을 권장으로 루프에서 파일을 이동할 때, 예를 들어, 당신이 파일을 호출 그래서, 다음을 호출 할 수있는 -i'ISN 옵션으로 올바르게 구문 분석 된 t (in?) :

mv -- "$f" new-"$f"

이 방법의 단점은 옵션 처리를 종료한다는 것입니다. 간단한 mkdir 예제의 경우 놀라운 일입니다. 실제로 명령 행에서 파일 이름을 따르는 옵션이 필요하면 전혀 작동하지 않습니다.
CVn

1
물론 모든 것에 단점이 있습니다. 옵션과 함께 산재 된 파일 이름을 다루는 경우 Amos의 솔루션 이 내가 생각할 수있는 유일한 대안이 될 수 있지만 실제로 도구가 옵션을 구문 분석하는 방법에 달려 있습니다.
slhck

1
OP 는 "명령 줄 인수와 같은 이름"(하이픈으로 시작하는 이름을 의미한다고 가정) 으로 파일 을 만드는 것에 대해 이야기하기 때문에, 이것이 전적으로 비합리적인 가정이라고 생각하지 않습니다. 받아 cc -o -myfile -Wall -myfile.c유일 약간 인위적인 예로서. 그 가치가있는 편집기는 파일 이름 -myfile.c을 묻는 파일에 저장할 수 있어야 하지만 C 컴파일러는 옵션 목록이 주어지면 원하는 것을 수행하지 않을 것입니다.
CVn

1
@Maksim 예를 들어 ccMichael이 위에서 지정한 명령 과 같이 입력 또는 출력 파일 이름을 설정하는 옵션이 필요한 명령의 경우 -o, 출력 파일을 지정하는 옵션이 있습니다.
slhck

1
당신은 항상 같은 것을 사용해야하는 이유 루프 예입니다 for f in ./*; do...보다는for f in *; do...
evilsoup

21

합리적인 프로그램으로 작업하는 가장 간단한 방법은. 앞에 상대 경로 이름을 사용하는 것입니다 -. 예를 들어 현재 작업 디렉토리에서 mkdir ./-a호출되는 디렉토리를 만듭니다 -a.

이 "트릭"을 사용하는 가장 일반적인 예는 대시로 시작하는 파일을 제거하려는 경우 rm ./-a입니다.


3
물론 파일 경로로 작업하는 경우에만 트릭을 수행하고 문자열로 구문 분석되는 임의의 명령 행 옵션은 아닙니다. 그러나 그렇지 않으면 접두사를 사용 ./하는 것이 좋습니다 . -rf라는 파일을 만든 다음이라고 rm *합니다.
slhck

1
@slhck 농담을하는 많은 사람들에게. 그러나 나는 이런 종류의 일이 서버의 일부를 지우는 경우를 충분히 보았습니다. 대시로 시작하는 파일의 위험에 대해 사람들에게 충분히 경고 할 수 없습니다. 내가 근무했던 한 곳은 공식적인 규칙으로 사용되기도했습니다. 이름이 "-f"또는 "-r"로 시작하는 파일을 절대 만들지 마십시오.
토니

1
이것은 대답이되어야합니다 : 그것은 유일한 휴대용 방법입니다 ( --모든 명령에 의해 이해되지는 않습니다)
Olivier Dulac

@OlivierDulac 나는 그것이 --bash 일 이라고 생각 했으므로 모든 프로그램에서 작동해야합니까?
gsingh2011

@ gsingh2011 아니요, "-"가 "플래그 끝"마커로 간주되는지 여부를 결정하는 코드는 응용 프로그램에 있으며 각 응용 프로그램이 해당 방식으로 처리할지 여부를 결정합니다.
Amos Shapira

4

왜 그런지 mkdir '-a' , 또는 mkdir \-a(따옴표 또는 백 슬래시를 사용하여) 이러한 방법 모두 당신 방지하기 위해 사용되기 때문에이 작동하지 않음은 (가능성을 bash그들에게 특별한 의미를주는 것). -a어쨌든 쉘에 특별한 것을 의미하지 않기 때문에 쉘에 전달되는 방법에는 영향을 미치지 않습니다 mkdir.

지금까지처럼 mkdir관한 한, 그것은 쉘에서 인수 목록을 수신하고 백 슬래시가 있었다, 또는 여부를 따옴표에 넣어 여부는 알 수 없습니다. 단지 하나의 주장 만 봅니다 -a. 당신이 필요한 이유입니다-- 다른 답변에 설명 된대로 .


-3

"slhck"의 답변 외에도 때때로 작동하는 또 다른 트릭이 있습니다.

문제의 파일 이름을 다음과 같은 (다른) qoutes 2 세트 내에 넣으십시오. "'-a'"'"-a"'.

이것이 작동하는지 여부는 프로그램에 따라 다르지만 프로그램이 POSIX --기능을 지원하지 않는 경우 최후의 수단 입니다.
POSIX 방법은 100 % 신뢰할 수 있으므로 항상 선호됩니다.


"POSIX 방법은 100 % 신뢰할 수 있기 때문에 항상 선호됩니다." --옵션 처리를 종료하는 데 사용 하면 파일 이름 뒤에 옵션이 필요하지 않다고 가정합니다. 항상 그런 것은 아닙니다.
CVn

물론 ...
Tonny

4
이것은 적어도 BSD 유형 시스템에서 '-a'or 라는 파일을 만들 것입니다"-a"
nohillside

4
당신이이 OS / 쉘 인용 할 수 않는 작품은?
nohillside

1
제대로 작동하면 이름이 따옴표로 묶인 파일을 처리하는 데 다소 문제가있는 것 같습니다.
muhmuhten
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.