shell腳本:for循環(huán)批量重命名帶空格文件名的文件

今天在學(xué)習(xí)shell腳本攻略第二章2.13 批量重命名和移動(dòng)時(shí),由于我的文件命令有的文件名字中出現(xiàn)空格,出現(xiàn)了許多問(wèn)題,因此將解決問(wèn)題的過(guò)程記錄了下來(lái),希望能夠和大家交流學(xué)習(xí),共同進(jìn)步,謝謝!


問(wèn)題代碼

問(wèn)題代碼

最終成功代碼

最終代碼

步驟一

思路: 由于在shell中運(yùn)行此腳本時(shí),發(fā)現(xiàn)將找到的文件名按照空格分割開(kāi)來(lái),結(jié)果利用for循環(huán)時(shí),每一個(gè)文件名被打散,例如'./Screenshot from 2017-09-22 14-43-51.png' 拆分成了'./Screenshot\ ' 'from' '2017-09-22'等,所以執(zhí)行錯(cuò)誤. 所以在解決該問(wèn)題時(shí)的第一個(gè)思路就是將文件名正確的讀出來(lái).

解決方案: 將

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?`find . -name "*.png" -o -name -maxdepth 1 -type f`

改為

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?`find . -name "*.png" -o -name -maxdepth 1 -type f -print`

原因: find -print 會(huì)將每一個(gè)查詢(xún)出來(lái)的文件通過(guò)換行符分割開(kāi)

結(jié)果: 依然不行,但是在shell中直接輸入該命令,確實(shí)是換行輸出

步驟二

思路: 雖然輸出是換行輸出,但是是for循環(huán)在讀入的時(shí)候是從一個(gè)大字符串中進(jìn)行分割,而分割的標(biāo)識(shí)是IFS,IFS默認(rèn)分隔符是空格\tab\換行,所以會(huì)將換行符和空格同樣對(duì)待,所以需要更改IFS的分割標(biāo)志.

解決方案:添加代碼

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OLDIFS=$IFS

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IFS=$'\n'

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IFS=$OLDIFS

注意: 這里將IFS的分割標(biāo)志換成了 $'\n' 換行符,如果寫(xiě)成'\n'僅僅表示字母n

結(jié)果: 每一次for循環(huán)能夠得到正確的文件名,但是在執(zhí)行mv命令時(shí)依然報(bào)錯(cuò),原因是文件名中有空格,不能找到正確的文件

步驟三

思路: 在shell中直接執(zhí)行mv命令,會(huì)把文件名中帶有空格的文件的文件名的空格進(jìn)行轉(zhuǎn)譯,即將' '轉(zhuǎn)成'\ '.所以這一步的思路就是得到轉(zhuǎn)譯之后的文件名

解決方案:添加代碼

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?img=${img// /\\ }

結(jié)果: 可以將文件名正確的轉(zhuǎn)換成轉(zhuǎn)譯之后的文件名,**但是**依然不能正確運(yùn)行,shell中提示的錯(cuò)誤信息是

mv: cannot stat './Screenshot\ from\ 2017-09-22\ 14-43-51.png': No such file or directory

但是我直接用這個(gè)文件名進(jìn)行mv命令操作是可以進(jìn)行的,所以這個(gè)時(shí)候進(jìn)行最后一步

步驟四

思路: 得到了正確的文件名,但是不能正確的執(zhí)行mv操作,那么問(wèn)題就在腳本的這個(gè)命令上

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?mv "$img" $new

所以我在mv前面加上了一個(gè)預(yù)處理的命令 eval

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?eval mv "$img" $new

mv命令在執(zhí)行前會(huì)先執(zhí)行eval命令,將變量的值轉(zhuǎn)換過(guò)來(lái),然后在執(zhí)行,最后得到了正確的結(jié)果

知識(shí)點(diǎn)

在完成整個(gè)文件批量重命名的過(guò)程中主要用到了一下幾個(gè)知識(shí)

1. find -print 和-print0

2. IFS 分隔符

3. 字符串替換的方法

4. eval命令

5. 以后命名的時(shí)候千萬(wàn)不要在帶空格了,很麻煩

6. 因?yàn)檫@次執(zhí)著于for循環(huán)解決,所以花了點(diǎn)時(shí)間,簡(jiǎn)單的可以使用while read line

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末疲陕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子儒飒,更是在濱河造成了極大的恐慌金刁,老刑警劉巖锹杈,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闯割,死亡現(xiàn)場(chǎng)離奇詭異礁哄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)铜涉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)遂唧,“玉大人芙代,你說(shuō)我怎么就攤上這事「桥恚” “怎么了纹烹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)召边。 經(jīng)常有香客問(wèn)我铺呵,道長(zhǎng),這世上最難降的妖魔是什么隧熙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任片挂,我火速辦了婚禮,結(jié)果婚禮上贞盯,老公的妹妹穿的比我還像新娘音念。我一直安慰自己,他們只是感情好躏敢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布闷愤。 她就那樣靜靜地躺著,像睡著了一般件余。 火紅的嫁衣襯著肌膚如雪讥脐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天啼器,我揣著相機(jī)與錄音旬渠,去河邊找鬼。 笑死端壳,一個(gè)胖子當(dāng)著我的面吹牛坟漱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播更哄,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼芋齿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了成翩?” 一聲冷哼從身側(cè)響起觅捆,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎麻敌,沒(méi)想到半個(gè)月后栅炒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年赢赊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乙漓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡释移,死狀恐怖叭披,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玩讳,我是刑警寧澤涩蜘,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站熏纯,受9級(jí)特大地震影響同诫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜樟澜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一误窖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秩贰,春花似錦贩猎、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蝗罗,卻和暖如春艇棕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背串塑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工沼琉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桩匪。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓打瘪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親傻昙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闺骚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容