\' 같은 문자를 이스케이프 처리하려고 하는데 작동하지 않습니다.
$ 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.