回文章列表
作者Storm.bbs@bbs.sayya.org (風) 看板: linux
標題Re: [問題] 更改大量檔名有無釜底抽薪的辦法?
時間SayYA 資訊站 (2008/02/29 Fri 20:26:36)
※ 引述《mystea.bbs@ptt.cc (mystea)》之銘言:
> j2sdk:sed
> 試用sed之後, 已能把字串做一些簡單的替換, 但要完成想做的事情,
> 還需要把處理過的字串存入環境變數才行.
> 目前的想法是這樣的:
> for name in $(find . -mindepth 2 -type d)
> do
> cp $name/output ../testresult/(用sed處理過的字串)
> done

   其實就你的狀況,你只要取代 "/" 為 "-" 的話,用 tr 不就可以了嗎?
   此外,find 指令其實有很多參數可以好好利用,以你上面的狀況來說,
   find 會列出 -mindepth 限制下的所有子目錄名稱,不管該目露有沒有
   output 這個檔案。這樣雖然不會怎樣,頂多在 cp 那邊得到一堆找不到檔
   案的訊息,但是會浪費時間。其實可以限制尋找的目標為檔案,以檔名為
   關鍵字,然後用 -printf 配合適當的格式字串來輸出路徑即可。

> 我的問題是, 不知道(用sed處理過的字串)那邊應該填甚麼.
> 我知道echo $name|sed 's:\/:-:g'
> 會顯示我要的結果, 但是卻不能用$name|sed 's:\/:-:g'代替我要的字串.
> name2=$name|sed 's:\/:-:g'之後
> echo $name2 得到的也是一片空白.
> 請問有甚麼辦法把sed處理過的字串便成環境變數呢?

    看樣子你的根本問題是不知道 pipeline (『|』符號) 到底是在做什麼。
    請先 Google 看看有關輸出輸入導向的基本說明,然後你就會知道為何
    你的 "name2=$name|sed 's:\/:-:g'" 會得到一片空白了。

--
※ Origin: SayYA 資訊站 <bbs.sayya.org> 
◆ From: adsl-070-155-125-254.sip.asm.bellsouth.net
文章選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻