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命令可以將一種已知的字元集文件轉換成另一種已知的字元集文件。它的作用是在多種國際編碼格式之間進行文本內碼的轉換。