A. linux shell 遍历文件夹 并将结果保存 到变量
#!/bin/bash
(($#<1))&&echo"paramiszero!"&&exit1
[!-d$1]&&echo"$1notpath"&&exit1
dir=$1
dir_p="$dirDirectory:"
cd$dir
dir=`pwd`
foriin`ls$dir`
do
if[-d$i];then
/tmp/sh/dir_file$i#我的脚本文件在/tmp/sh中,需要改一下这里
else
dir_p="$dir_pFile$i"
fi
done
cd..
echo$dir_p
实验结果:
[root@localhost sh]# ./dir_file /tmp/python/
python_2 Directory : File 1.log File 2.log
python_3 Directory : File 3.log
/tmp/python/ Directory : File p File t.py File y.py
这样应该可以吧,试试看
B. 如何在Linux系统实现字符编码转换
Linux下提供了iconv实现这一功能,在Linux 的 shell 环境下,iconv用法如下:
iconv -f fromconde -t tocode
-f: 指定需要转换的文本编码
-t: 指定目标文本编码
我们也可以用 -l 列举出所有已知的字符编码集合
iconv -l
具体用法可以通过帮助函数 iconv --help来详细了解
另外,我们也可以在程序中直接使用该函数实现文本的编码转换
#ifndef __CODE_CONVERTER
#define __CODE_CONVERTER
#ifdef WIN32
#include <windows.h>
#else
#include <iconv.h>
#endif
class CodeConverter
{
private:
#ifndef WIN32
iconv_t m_cd;
#endif
const char* m_pszFromCode;
const char* m_pszToCode;
public:
CodeConverter()
{
m_pszFromCode = NULL;
m_pszToCode = NULL;
#ifndef WIN32
m_cd = 0;
#endif
}
~CodeConverter()
{
#ifndef WIN32
iconv_close(m_cd);
#endif
}
bool Initialize(const char *pszToCode, const char *pszFromCode);
size_t Convert(char* inBuf, size_t inBytesLeft, char* outBuf, size_t outBytesLen);
};
#endif
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "code_converter.h"
#include <errno.h>
bool CodeConverter::Initialize(const char* pszToCode, const char* pszFromCode)
{
if(pszFromCode == NULL || pszToCode == NULL) return false;
m_pszFromCode = pszFromCode;
m_pszToCode = pszToCode;
#ifndef WIN32
m_cd = iconv_open(m_pszToCode,m_pszFromCode);
if(m_cd == (iconv_t)-1)
{
printf("cannot open iconv descripter\n");
return false;
}
#endif
return true;
}
size_t CodeConverter:: Convert(char* inBuf, size_t inBytesLeft, char* outBuf, size_t outBytesLen)
{
int nRealLen = 0;
#ifdef WIN32
if(stricmp(m_pszFromCode,"UNICODE") == 0)
{
nRealLen = WideCharToMultiByte(CP_ACP,0,(PWCHAR)inBuf, inBytesLeft, (PCHAR)outBuf, outBytesLen,NULL,NULL);
}
if(stricmp(m_pszFromCode,"gb2312") == 0)
{
nRealLen = MultiByteToWideChar(CP_ACP,0,(PCHAR)inBuf,inBytesLeft,(PWCHAR)outBuf, outBytesLen);
}
#else
size_t outBytesLeft = outBytesLen;
size_t ret = 0;
while (1)
{
ret = iconv(m_cd, &inBuf, &inBytesLeft, &outBuf, &outBytesLeft);
if (ret == 0) break;
if (ret == (size_t)-1)
{
printf("iconv error aaa: %s\n",strerror(errno));
return -1;
}
inBuf++; inBytesLeft--;
}
nRealLen = outBytesLen-outBytesLeft;
outBuf[nRealLen]=0;
#endif
return nRealLen;
}
C. iconv."$data1">"$dataf1"这里两个变量,如果在shell里面执行没问题,可是写到sh语句里面执行就有问题了
那两个变量应该是两个文件名吧?
你按这个试试呢
D. shell哪个命令可以将uicode编码转换成中文
使用iconv命令即可,大多数Linux发布版都自带:
先把包含编码“\u82f9\u679c”的文件保存为这个名字:pingguo_UTF16.txt
然后执行下面命令:
iconv -f UTF16 -t UTF8 pingguo_UTF16.txt > pingguo_UTF8.txt
iconv -f UTF16 -t GB18030 pingguo_UTF16.txt > pingguo_GB18030.txt
用文本编辑器打开查看这两个(pingguo_UTF8.txt / pingguo_GB18030.txt)新文件即可。
E. 【求助】请问为什么要学习linux下的shell编程
不能拿学习其它编程语言的概念来学习shell,学习shell,主要就是学会linux下各种工具的使用,然后用shell语言把他们联合起来达到一定的目的,拿身边真实的例子说说 1 用excel软件先把数据转换成csv文件,比如用空格隔开每一行的数据 2 使用iconv把文件转为utf8编码 3 使用awk把文件内容转为sql的insert语句 4 然后传入mysql程序插入数据 所有步骤可以写成一个简单的shell语句,形式上如下: cat somedata.csv | iconv -to utf8 | gawk '{print ......}' | mysql -uroot -pxxxxx 这样做的好处是: 1 可以用现成的软件组合出你需要的功能,而不是一个特定的软件,比如这里的iconv和awk 2 这些软件学一次就可以用一辈子,可以用于各种不同的场合,达到所想即所得 3 开发成本低,还可以写成一个脚本,然后用corntab定时调用 更多的交流可以给我发邮件: [email protected]
F. 怎么用SHELL命令转换语言编码格式
是转换文本文件的编码格式么,用iconv:
ICONV(1) Linux User Manual ICONV(1)
NAME
iconv - convert text from one character encoding to another
SYNOPSIS
iconv [options] [-f from-encoding] [-t to-encoding] [inputfile]...
G. linux 怎么修改shell的字符属性
查看文件编码file命令
file ip.txt
查看文件编码file命令
file ip.txt
ip.txt: UTF-8 Unicode text, with escape sequences
一、利用iconv命令进行编码转换文件内容编码转换
iconv命令用于转换指定文件的编码,默认输出到标准输出设备,亦可指定输出文件.
用法: iconv [选项...] [文件...]
有如下选项可用:
输入/输出格式规范:
-f, --from-code=名称 原始文本编码
-t, --to-code=名称 输出编码
信息:
-l, --list 列举所有已知的字符集
输出控制:
-c 从输出中忽略无效的字符
-o, --output=FILE 输出文件
-s, --silent 关闭警告
--verbose 打印进度信息
-?, --help 给出该系统求助列表
--usage 给出简要的用法信息
-V, --version 打印程序版本号
例子:
iconv -f utf-8 -t gb2312 aaa.txt >bbb.txt
这个命令读取aaa.txt文件,从utf-8编码转换为gb2312编码,其输出定向到bbb.txt文件.
你可照着上面的命令格式,改改试试。
H. xshell帮助命令注释无法更改为中文注释
一、在Windows里用文本编辑器将该文件另存为同名文件,在编码栏选择utf-8,这样保存之后,在Linux里便不会乱码了。
二、使用iconv命令转码
命令格式:$ iconv -f gb18030 -t utf-8 -o {目标文件} {源文件}
I. shell脚本怎么修改编码
首先,我得知道这个文件具体采用的是什么样的编码,如果是ISO-8859我将会把它转成UTF-8,其他的ASCII这些都先不做处理,这里可以使用file filename或者是enca iconv
enca需要获取下:sudo apt-get install enca
iconv的一般用法是:(可以man iconv)
-f from code 源文件编码
-t to code 目标文件编码
-o output file 保存为文件
例子:
iconv -f GB2312 -t UTF-8 -o google.txt google.txt
将google.txt的编码由GB2312更新为UTF-8
enca也同上用法,一般在脚本中对于未曾提供的语言,enca不会报错,这样可以保证脚本顺利执行
enca -L zh_CN file 检查文件编码
enca -L zh_CN -x UTF-8 file 将文件编码修改为UTF-8并覆盖文件
具体的用法都可以去查看man手册或者google之
好了,不多说,查看脚本吧!
#!/bin/bash -x
#由于之前使用windows系统来存放过一些文本文件,利用dropbox同步过来的时候,文件发生乱码,故写脚本来批量处理
#这里是对所有的需求文件进行处理,后续可根据修改目录进行处理
SUBFIX="txt html htm conf"
#cd /home/gavin/tmp
if [ -z $1 ];then
cd $PWD
else
if [ -d $1 ];then
cd $1
else
echo " $1 is not exist;"
exit 1
fi
fi
for i in $SUBFIX;
do
files=`find . -name "*.$i"`
for f in $files;
do
type=`file $f|awk -F':' '{print $2}' |awk '{print $1}'` #获取文件类型
if [ $type = "ISO-8859" ];then
#iconv -f GB2312 -t UTF-8 -o $f $f
enca -L zh_cn -x UTF-8 $f
else
echo "$f encoding is :$type"
fi
done
done
J. 怎样在Shell中把utf8编码转成中文显示
可以使用编码转换工具iconv iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件。它的作用是在多种国际编码格式之间进行文本内码的转换。