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个字节)表示。
重要的是要明白,作为ls
和find
命令只是吐字节序列而不将它们解码为文本,这只是控制台的工作(在我的情况下,在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