파일 이름에 특수 문자 사용

파일 이름에 특수 문자 사용

라는 파일을 만들어야 합니다.*'test'*

내가 쓴다면touch \'test\'

ls프로그램'test'

하지만 내가 쓴다면touch \*\'test\'\*

ls지금 보여줘*'\''test'\''*

어떤 팁이 있나요? 누군가 내가 뭘 잘못하고 있는지 설명할 수 있나요?

내 운영 체제는 Ubuntu 20.04입니다.

답변1

문제는 GNU ls도움이 되는모호하지 않은 인용 형식으로 이상한 파일 이름을 출력합니다. 이는 셸에 입력하여 동일한 이름을 얻는 방법과 유사합니다.

때로는 도움이 되지만 때로는 혼란만 가중시킬 뿐입니다. 이 기능을 끄려면 제어 환경 변수를 설정하십시오.

export QUOTING_STYLE=literal
ls

또는 해당 명령줄 플래그를 사용하세요.

ls --quoting-style=literal

또는 더 짧습니다 ls -N.

다음을 인용하여 이상한 문자가 포함된 파일 이름을 만들 수 있습니다.

touch "*'test'*"                       # « *'test'* »

쉘이 명령줄을 실행하기 전에 인용된 문자열을 처리하기 때문에 다양한 유형의 따옴표가 있는 문자열이 인접할 수 있다는 점을 기억하십시오(여기서는 작은 따옴표로 묶인 문자열과 큰 따옴표로 묶인 문자열이 있음).

touch 'Quotes "here" at'" 5 o'clock"    # « Quotes "here" at 5 o'clock »
#     '←-first-string-→'"←-second-→"

귀하의 예:

touch \'test\'                         # « 'test' »
touch \*\'test\'\*                     # « *'test'* »

ls -1 --quoting-style=literal          # List files one per line
  *'test'*
  'test'

답변2

내가 쓴다면touch \'test\'

ls 디스플레이'test'

아니요! 보여주다 "'test'".

하지만 내가 쓴다면touch \*\'test\'\*

ls가 이제 표시됩니다.*'\''test'\''*

아니요! 보여주다 '*'\''test'\''*'.

최신 버전의 GNU ls는 Bourne 스타일 셸(bash, zsh 등, Fish와도 호환 가능하다고 생각함)에 입력할 수 있는 방식으로 파일 이름을 표시합니다. touch "'test'"and를 사용하여 이러한 파일을 만들 수 있습니다 '*'\''test'\''*'(물론 이를 참조하는 방법은 여러 가지가 있으며 다른 방법을 선택하는 데 문제가 없습니다).

ls파일 이름을 인쇄하는 등 특수 문자를 표시하기 위해 다른 방법을 사용하도록 지시할 수 있습니다 ls --literal(이름에 열 표시와 혼동될 수 있는 공백이 포함되어 있거나 이름에 개행 문자가 포함되어 있거나 그렇지 않은 경우와 같이 결과가 모호한 경우에도 마찬가지). -인쇄 가능한 문자). 바라보다선적 서류 비치--quoting-style다른 스타일도 가능합니다.

답변3

일부 시스템에서는 ls"특수" 문자가 포함된 파일 이름에 작은따옴표를 추가합니다. 바라보다이 문제더 알아보기.

최종 파일 이름에 작은따옴표를 원하므로 큰따옴표를 사용할 수 있습니다(디렉토리에 다른 파일이 없는 한). 내 Ubuntu 22.04에서는 예상대로 작동합니다.

touch "*'test'*"
ls --quoting-style=literal

관련 정보