Bash - 用特殊字符导出txt

我试图用非空的所有文件夹生成txt。Bash - 用特殊字符导出txt

的问题是,这些文件夹的名称有“特殊字符”,所以不是上市“Começo”被拯救“Começo”(作为一个例子)

我读过有关的iconv,但从我读的这是一个“转换器”,我不想“转换”文件,我想将它们保存在正确的形式,而不需要转换后。

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

回答:

应该没有问题。 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

我们可以推断,从od输出,即,因为我的Linux会议上有一个UTF-8的locale编码,文件名是内部使用UTF-8编码(7个字节)表示。

重要的是要明白,作为lsfind命令只是吐字节序列而不将它们解码为文本,这只是控制台的工作(在我的情况下,在UTF-8中,所以我看到它们好)。关于生成的文件list.txt也是如此,其中我们只有对应于文件名的原始字节。而且,再次,我看到他们确定当我cat它,因为(并且只是因为)我的控制台有适当的编码(UTF-8)。

只有当我尝试在其他环境中看到文件时,其他语言环境的控制台或试图将其读取为ISO-8859-1或其他编码的文本查看器编辑器时,我会看到“奇怪的字符“

[[email protected] t]$ cat list.txt 

.

./Começo

./xx

(我的控制台编码设置为ISO-8859-1之后 - 在我的情况,Konsole->设置 - >编辑配置文件 - >高级 - >编码)

以上是 Bash - 用特殊字符导出txt 的全部内容, 来源链接: utcz.com/qa/264661.html

回到顶部