"긴 파일 이름"에 와일드카드 *를 사용하는 방법은 무엇입니까?

"긴 파일 이름"에 와일드카드 *를 사용하는 방법은 무엇입니까?

\' 같은 문자를 이스케이프 처리하려고 하는데 작동하지 않습니다.

$ cp 'A long filen* ./short_filename

답변1

파일에 따옴표가 없습니다. 파일은 입니다 ls.

바라보다:"ls"가 갑자기 공백을 작은따옴표로 묶는 이유는 무엇입니까?


당신은 그것을 사용할 수 있습니다

cp "A long file n"* short_filename

*외부 따옴표 여야 합니다 .

\또는 모든 공백(및 , ;등 의 기타 특수 문자 |) 을 이스케이프 처리하세요.

cp A\ long\ file\ n* short_filename

답변2

파일 이름에 작은따옴표가 포함된 경우 큰 \따옴표나 큰따옴표를 사용하여 이스케이프할 수 있습니다. 그러나 다음 공백도 이스케이프해야 합니다.

$ touch \'A\ long\ filename\'
$ ll
total 1
-rw-rw-r-- 1 jesse jesse 0 Jan 11 14:09 'A long filename'

하지만 glob으로 이스케이프할 수 없으므로 *따옴표 바깥에 두어야 합니다.

$ ls -l \'A\ long\ file*
-rw-rw-r-- 1 jesse jesse 0 Jan 11 14:09 'A long filename'
$ ls -l "'A long file"*
-rw-rw-r-- 1 jesse jesse 0 Jan 11 14:09 'A long filename'

$ cp "'A long file"* ./short_file
$ ll
total 1
-rw-rw-r-- 1 jesse jesse 0 Jan 11 14:09 'A long filename'
-rw-rw-r-- 1 jesse jesse 0 Jan 11 14:11 short_file

답변3

적어도 GNU는 ls무언가를 참조하는 방법도 알려줄 수 있습니다. 최신 버전에서는 기본적으로 켜져 있지만 몇 년 전만 해도 다음을 수행할 수 있었습니다.

$ ls --quoting-style=shell
"'A long filename.mp4'"

사용 가능한 다른 인용 스타일이 있습니다. ls맨페이지를 참조하세요.

printf또한 (적어도 bash에서는) 몇 가지 작업을 수행할 수 있습니다 .

$ printf '%q\n' *
\'A\ long\ filename.mp4\'

%q따옴표로 묶인 인수(뒤에 \n개행 문자가 옴)를 인쇄하고 *모든 파일 이름과 일치하는 방법입니다. 그래서 이것은 printf를 사용하는 일종의 ls입니다.

그런 다음 에 추가하는 방법을 알아내면 인용 *할 필요가 없으므로 두 스타일 모두에서 다음과 같습니다.

"'A long file"*    # we've just cut a ""-quoted string short.
\'A\ long\ file*   # that's just escapes, so cut it short.

관련 정보