2016-08-02 5 views
1

비어 있지 않은 모든 폴더로 txt를 생성하려고합니다.Bash - 특수 문자로 txt 내보내기

문제는 이러한 폴더의 이름 (예를 들어) "Começo을"절약 그래서 대신 "Começo을"목록의 "특수 문자"가

하는 것은 내가의 iconv에 대해 읽었습니다,하지만 것입니다 내가 읽은 것에서 "conversor"이고, 나는 파일을 "변환"하고 싶지 않다. 나는 변환하지 않고 올바른 형식으로 저장하고 싶다.

find /SubFolder/* -type d -not -empty -exec bash -c 'echo ${0#/Folder/}' {} \; > /Folder/NotEmpty.txt 
+0

는"모두와 TXT를 내보내기 폴더 ... "라는 말은"모든 폴더의 파일 이름으로 텍스트 파일 생성 ... "을 의미합니까? 게다가, 우리는 리눅스에 대해서 말하고 있습니다. – leonbloy

+0

그리고 네, 파일, 즉 모든 이름을 포함하는 텍스트 파일을 변환하고 싶습니다. – Siguza

+0

@leonbloy 예, 디렉토리에 비어 있지 않은 모든 폴더가있는 txt 파일을 생성하십시오. – blocnt

답변

2

아무런 문제가 없습니다. Linux의 파일 이름은 bytes의 배열 일 뿐이며, 필요하지 않으면 텍스트로 해석되지 않습니다 (즉, 디코딩 됨). 그리고 귀하의 경우에는 그렇지 않습니다.

[[email protected] t]$ ls 
Começo xx 
[[email protected] t]$find . -type d 
. 
./Começo 
./xx 
[[email protected] t]$ find . -type d -exec bash -c 'echo ${0#/Folder/}' {} \; 
. 
./Começo 
./xx 
[[email protected] t]$ find . -type d -exec bash -c 'echo ${0#/Folder/}' {} \; > list.txt 
[[email protected] t]$ cat list.txt 
. 
./Começo 
./xx 
[[email protected] t]$ od -c list.txt 
0000000 . \n . / C o m e 303 247 o \n . / x x 
0000020 \n 
0000021 

우리는 내 리눅스 세션이 UTF-8 로케일 인코딩을했기 때문에, 파일 이름은 내부적으로 UTF-8 인코딩 (7 바이트)로 표현 된 것으로, od 출력에서 ​​추론 할 수있다.

lsfind과 같은 명령은 텍스트로 "디코딩"하지 않고 해당 바이트 시퀀스를 내뿜는다는 것을 이해하는 것이 중요합니다. 이것은 콘솔의 작업입니다 (제 경우에는 UTF-8로 표시되므로 볼 수 있습니다). 승인). 생성 된 파일 list.txt에 대해서도 마찬가지입니다. 파일 이름에 해당하는 원시 바이트 만 있습니다. 그리고, 내 콘솔이 적절한 인코딩 (UTF-8)을 가지고 있기 때문에 다시 cat 일 때 확인합니다.

다른 환경, ISO-8859-1 또는 다른 인코딩으로 읽으려고 시도하는 다른 로켈 또는 일부 텍스트 뷰어 편집기가있는 콘솔에서 파일을 보려고 만하면 "이상한 문자 "

[[email protected] t]$ cat list.txt 
. 
./Começo 
./xx 

(ISO-8859-1로 내 콘솔 인코딩을 설정 한 후 - 내 경우, Konsole- -> 설정 -> 프로필 수정 -> 고급 -> 인코딩)으로

+0

설명 주셔서 감사합니다 :) – blocnt