|經分析,文來件名自中以  ICIMSIDIFF 開頭,awk 中 可以考慮以它為分界符
試一下如下代碼:
ls -ltr *20100502* | awk -F "ICIMSIDIFF"  '{print $2}'|cut -b 1-2
㈡ 用Linux程序awk、sed和shell等實現打開一個文件中包含的文件名
#!/bin/sh
whilereadloop
do
(對$loop文件做操作)
done<file.txt
㈢ shell獲取目錄下最新的文件,文件是以日期命名
1、打開Python開發工具IDLE,新建『dir.py』,並寫代碼如下。

㈣ linux三劍客的基本使用——grep、sed、awk
grep、sed、awk是linux功能非常強大的三個命令,grep是查找過濾文本,sed是對文本進行編輯替換,awk是對文本進行分析報告。
  
 最簡單的理解就是找什麼東西用grep,想修改什麼內容用sed,想格式化內容用awk。
  
 創建一個文件名為grep_text.txt的文件,並放入內容:
   SillyMadman is both a madman and a fool.
   Everyone agrees with this sentence.
  
 我要查找在grep_text.txt文件里有Silly的行
   命令是: grep Silly grep_text.txt
   會返回內容:SillyMadman is both a madman and a fool.
  
 也可以帶以下參數,這些我認為可能容易用到的參數,其它的參數需要另行查找
   文檔,比如可以使用正則進行匹配。
  
 內容相關的
   -B, --before context=NUM顯示所在行之前的行數
   -A, --after context=NUM顯示所在行之後的行數
   -C, --context=NUM列印輸出上下文的行數
  
 過濾內容相關的參數:
   -i, --忽略大小寫區分
   -w,--匹配查找的整個單詞
   -x,--匹配查找的整行文本
   -v,   --過濾掉匹配的內容
  
 輸出內容相關的參數
   -n, --行號列印帶有輸出行的行號
  
 比如,我要查找在grep_text.txt文件里不區分大小寫查找sillymadman,並顯示行號和匹配文本的下一行,那麼我可以用以下命令查找
   grep sillymadman grep_text.txt -i -n -A1
   內容返回為
   1:SillyMadman is both a madman and a fool.
   2-Everyone agrees with this sentence.
  
 總體而言grep的使用方式就是
   grep [參數...](查找的內容) (文件名)
  
 grep也經常搭配管道符號"|"使用,比如我要查詢某程序的進程,並去掉查找進程本身,那麼命令為
   ps -ef | grep program_name | grep -v grep
  
 再創建一個文件名為sed_text.txt的文件,並放入內容:
   SillyMadman is both a madman and a fool.
   Everyone agrees with this sentence.
  
 我想要在第一行下面添加一句:woshishazi
   命令是:sed '1a\woshishazi' sed_text.txt
   返回內容為:
   SillyMadman is both a madman and a fool.
   woshishazi
   Everyone agrees with this sentence.
  
 但是以上這個命令不會修改原文件,如果需要,需要加上-i
   sed -i  '1a\woshishazi' sed_text.txt
  
 上面a是代表append,從指定行後面新的一行添加數據,還有其他操作
  
 操作有以下這些
   a :從下面一行新增
   i :從上面一行插入,
   d :刪除
   c :整行替換
   p :列印
   s :對指定內容進行替換
  
 下面稍微舉下例:
   a: sed '1a\woshishazi' sed_text.txt 從第一行後面添加
   i: sed '1i\woshishazi' sed_text.txt 從第一行前面插入
   d: sed '1d' sed_text.txt 刪除第一行
   c: sed '1c\woshishazi' sed_text.txt 替換第一行內容為woshishazi
   p: sed -n '1p' sed_text.txt  列印第一行,一般搭配-n使用,其他內容就不會再展示
   s:這個相對復雜一點需要詳細說明一下
   sed的參數為 '[行]s/要被替換的內容/新的內容/g'
   行是一個可選項,可以選擇具體的行進行替換
   g代表替換所有匹配到的內容,也可以改為數字,表示第幾次匹配到時進行替換
   sed  's\SillyMadman\shafengzi\g' sed_text.txt ,將所有SillyMadman替換為shafengzi
   輸出結果為:
   shafengzi is both a madman and a fool.
   Everyone agrees with this sentence.
  
 最後再創建一個文件名為awk_text.txt的文件,並放入內容:
   1 a
   2 b
   3 c
   4 d
   5 f
   以空白符作為分隔符這個文本相當於每一行有兩個欄位。
  
 那麼列印第一個欄位時 awk '{print   0的話,則代表列印所有欄位
  
 awk默認以空白符作為分隔符,也可以指定分割符通過-F
   awk -F: '{print $1}' awk_text.txt,以「:」作為作為分隔符
   那麼返回內容就為
   1 a
   2 b
   3 c
   4 d
   5 f
   相當於只有一列或者說一個欄位
  
 然後還可以對前面加上一個正則對行進行匹配內容
   awk  '/a/{print   2 ~ /a/){print $1}' awk_text.txt
   返回內容為
   1
㈤ Linux文件名替換
^1、直接用mv移動命令來源
mva**.cppb**.c
#移動以a開頭.cpp文件並重命名成以b開頭.c文件
2、用文本處理工具awk操作
lsa*.cpp|awk'{n=$0;sub(/^a/,"b");sub(/.cpp$/,".c");system("mv"n""$0)}'
#ls命令查看所有a開頭的.cpp文件,然後|(管道符)傳遞到awk命令處理,用sub實現第一個位置的替換^a以a開頭的替換成b開頭。3、用for循環字元串截取方法
forfilenameina*.cpp
do
len=${#filename}
newName="b"${filename:1:len-3}
mv$filename$newName
done
4、用sed的正則表達式替換
forfilenameina*.cpp
do
newName=`echo$filename|sed-r's/^a(.*.c)pp$/b1/'`
#匹配以a開頭以.c結尾的文件,然後替換成b
mv$filename$newName
done
㈥ awk輸出目錄下文件名和指定列的值
awk'{printFILENAME":"$8}'A.txtB.txt
㈦ Shell獲取某目錄下所有文件夾的名稱
方法有三,如下:
#!/bin/bash
#方法一
dir=$(ls-lD:/temp/|awk'/^d/{print睜罩粗$NF}')
foriin$dir
do
echo$i
done
#######
#方法二
fordirin$(lsD:/tmep/)
do
[-d$dir]&&echo$dir
done
##方法三
ls-lD:/temp/|awk'/^d/{print$NF}'
##其實同方法一,直接就可以顯示不用for循環
 大致思路:
  <?php
  function traverseDir($dir){
  if($dir_handle = @opendir($dir)){
  while($filename = readdir($dir_handle)){
  if($filename != "." && $filename != ".."){
  $subFile = $dir.DIRECTORY_SEPARATOR.$filename; 要將源目錄及子文件相連
  if(is_dir($subFile)){ 若子文件是個目錄
  echo $filename.'<br>' 輸出該目錄名稱
  traverseDir($subFile); 遞歸找出下級目錄名稱
  }
  }
  }
  closedir($dir_handle);
  }
  }
  $dirNames = traverseDir("d:/dos"); 測試某目錄
  ?>
 呵呵,原來是團友啊我寫了一個!Set ws=WScript.CreateObject("wscript.shell")
  w=ws.CurrentDirectory
  Set fso=WScript.CreateObject("scripting.filesystemobject")
  Set fs=fso.GetFolder(w)
  Set f=fs.SubFolders
  For Each uu In f
  t=t & uu.Path & vbcrlf
  Next
  MsgBox t
用FSO對象模型不是很好么,這種代碼看的好痛苦哇!
 我在之前做過一個FTP的客戶端工具。
  drw 文件夾
  -rw 文件(有擴展名或無擴展名)
  我是根據服務端返回的報文進行分析獲取的列表。
  給你一些代碼片段:
  / <summary>
  / 獲取指定目錄下的文件和文件夾。
  / </summary>
  / <param name=path>要獲取的目錄</param>
  / <param name=WRMethods>要發送到FTP伺服器的密令。</param>
  / <returns></returns>
  public string[] GetFileList(string path, string WRMethods)從ftp伺服器上獲得文件列表
  {
  WebResponse response;
  string[] downloadFiles;
  int conut = 4;
  StringBuilder result = new StringBuilder();
  Connect(path);
  if (FTPVariable.IsUseProxy_ftp)
  {
  reqFTP.Proxy = FtpProxy.GetFtpSelectProxy(FTPVariable.FtpCommand_transferProxyName);
  }
  reqFTP.ReadWriteTimeout = 12000;
  如果不應銷毀到伺服器的連接,則為 true;否則為 false。默認值為 true。
  
  reqFTP.Method = WRMethods;
  try
  {
  response = (FtpWebResponse)reqFTP.GetResponse();
  goto Ftp_lbl_03;
  }
  catch (WebException webex)
  {
  GetReply(webex.Message);
  if (ReplyCode == 530) 未登錄。
  {
  goto Ftp_lbl_04;
  }
  else if (ReplyCode == 550)
  {
  goto Ftp_lbl_04;
  }
  else
  {
  FtpManage.SetLog("獲取列表超時,等候1秒後重試!");
  goto Ftp_lbl_01;
  }
  }
  Ftp_lbl_01:
  try
  {
  FtpManage.SetLog("正在連接伺服器 " + FtpRemoteHost);
  response = GetRequest(path, WRMethods);
  }
  catch (WebException)
  {
  FtpManage.SetLog("獲取列表超時,等候1秒後重試!");
  downloadFiles = null;
  System.Threading.Thread.Sleep(1000);
  if (conut == 0)
  {
  goto Ftp_lbl_02;
  }
  conut--;
  goto Ftp_lbl_01;
  }
  catch (Exception ex)
  {
  MSG.Show(ex.Message, Global.GetRS["msgTilteError"], MessageBoxButton.OK, MsgIco.Error);
  FtpManage.SetLog("命令執行失敗,原因:" + ex.Message);
  downloadFiles = null;
  return downloadFiles;
  }
  Ftp_lbl_03:
  StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);中文文件名
  string line = reader.ReadLine();
  while (line != null)
  {
  result.Append(line);
  result.Append("
");
  line = reader.ReadLine();
  }
  if (result.Length == 0)
  {
  return null;
  }
   to remove the trailing '
'
  result.Remove(result.ToString().LastIndexOf('
'), 1);
  reader.Close();
  response.Close();
  FtpManage.SetLog("命令已成功執行");
  return result.ToString().Split('
');
  Ftp_lbl_04:
  FtpManage.SetLog(ReplyInfo);
  return null;
  Ftp_lbl_02:
  FtpManage.SetLog("550 獲取列表失敗,無法連接遠程伺服器!");
  FtpManage.ftpmanage.IsRefurbish = true;
  return null;
  }
  / <summary>
  / 獲取指定目錄下的文件和文件夾。
  / </summary>
  / <param name=path>要獲取的目錄</param>
  / <returns></returns>
  public string[] GetFileList(string path)從ftp伺服器上獲得文件列表
  {
  return GetFileList(FTPVariable.FtpURLhead + FtpRemoteHost + "/" + path, WebRequestMethods.Ftp.ListDirectory);
  }
  / <summary>
  / 獲取指定目錄下的文件和文件夾。
  / </summary>
  / <returns></returns>
  public string[] GetFileList()從ftp伺服器上獲得文件列表
  {
  return GetFileList(FTPVariable.FtpURLhead + FtpRemoteHost + "/", WebRequestMethods.Ftp.ListDirectory);
  }
  / <summary>
  / 獲取目錄和文件名,返回目錄表。
  / </summary>
  / <param name=path>要獲取的目錄</param>
  / <returns></returns>
  public string[] GetCatalog_FileList(string path)
  {
  string[] fountainhead = GetFileList(FTPVariable.FtpURLhead + FtpRemoteHost + "/" + path, WebRequestMethods.Ftp.ListDirectoryDetails);
  string[] Catalog = null;
  if (fountainhead == null)
  {
  return null;
  }
  Catalog = new string[fountainhead.Length];
  for (int i = 3; i < fountainhead.Length; i++)
  {
  Catalog[i - 3] += fountainhead[i].Substring(55, fountainhead[i].Length - 55) + "&";FileName
  Catalog[i - 3] += fountainhead[i].Substring(30, 12) + "&";FileSize
  Catalog[i - 3] += fountainhead[i].Substring(42, 13) + "&";AmendDate
  Catalog[i - 3] += fountainhead[i].Substring(0, 3) + "&";
  }
  return Catalog;
  }
fso.GetFolder(path)
你剛才不是問過了么?
 查找某目錄下所有 文件 及 子文件夾
  試一試不用 FileSystemObject 對象,只用基本控制項的代碼。
  '例子需控制項:Command1,List1,List2,File1,Dir1,都採用默認屬性。
  '例如,查找 C: ,帶 '** 的語可修改
  Dim ctFind As Boolean
  Private Sub Form_Load()
  Me.Caption = "查找所有文件及文件夾"
  Command1.Caption = "查找"
  List2.Visible = False: File1.Visible = False: Dir1.Visible = False
  Label1.Caption = "就緒"
  End Sub
  Private Sub Form_Unload(Cancel As Integer)
  End
  End Sub
  Private Sub Form_Resize()
  Dim W As Long
  On Error Resume Next
  W = 720
  List1.Move 0, 0, Me.ScaleWidth - W - 120, Me.ScaleHeight - 300
  Command1.Move Me.ScaleWidth - W - 60, 300, W
  Label1.Move 90, Me.ScaleHeight - 255, Screen.Width, 255
  End Sub
  Private Sub Command1_Click()
  ctFind = Not ctFind
  If ctFind Then
  Command1.Caption = "取消"
  Call FindDirFile("C:") '**查找 C: 下的所有文件和目錄,或 C:Windows 等
  Command1.Caption = "查找"
  Else
  Command1.Caption = "查找"
  End If
  End Sub
  Private Sub FindDirFile(ByVal nPath As String)
  Dim I As Long, nDir As String, Ci As Long
  ctFind = True
  List1.Clear: List2.Clear
  If Right(nPath, 1) <> "" Then nPath = nPath & ""
  List1.AddItem "查找 " & nPath: List2.AddItem nPath
  File1.Pattern = "*"
  File1.System = True: File1.Hidden = True: File1.ReadOnly = True
  On Error GoTo Cuo
  Dir1.Path = nPath
  On Error GoTo 0
  Do
  If List2.ListCount = 0 Then Exit Do
  nPath = List2.List(0)
  List2.RemoveItem 0
  Dir1.Path = nPath
  For I = 0 To Dir1.ListCount - 1
  GoSub ShowGe
  nDir = Dir1.List(I)
  If Right(nDir, 1) <> "" Then nDir = nDir & ""
  List1.AddItem "■" & nDir
  List2.AddItem nDir
  Next
  File1.Path = nPath
  For I = 0 To File1.ListCount - 1
  GoSub ShowGe
  List1.AddItem " " & nPath & File1.List(I)
  Next
  Loop
  Label1.Caption = "查找完畢,共找到 " & List1.ListCount & " 個條目"
  ctFind = False
  Exit Sub
  Cuo:
  List1.AddItem "起始目錄不存在:" & nPath
  ctFind = False
  Exit Sub
  ShowGe:
  Ci = Ci + 1
  If Ci < 99 Then Return
  Ci = 0
  Label1.Caption = "已找到 " & List1.ListCount & " 個:" & nPath
  DoEvents
  If ctFind Then Return
  End Sub
 執行如下三條命令即可:
  (1)、$script myresultfile
  (2)、$ls -al *.txt
  (3)、$exit
  此時,該目錄下的所有 txt 文件名稱就會以長格式保存在 myresultfile 文件中了。
  然後你再使用 SHELL 編程的功能把那些無用的列去掉即可。