Shell中處理包含空格的文件名實(shí)例
今天在處理文件時(shí)遇到個(gè)問題,當(dāng)文件名包含空格時(shí),for循環(huán)就出問題了。
例如,我在當(dāng)前文件夾下建立3個(gè)文件名包含空格的文件:
keakons-MacBook-Pro:test keakon$ touch "test 2"
keakons-MacBook-Pro:test keakon$ touch "test 3"
keakons-MacBook-Pro:test keakon$ ls
test 1 test 2 test 3
然后for循環(huán)輸出文件名:
> do echo $file;
> done
test
1
test
2
test
3
可以看到,文件名被分開了。
復(fù)制操作也不行:
keakons-MacBook-Pro:test keakon$ for file in `ls`; do cp "$file" ../bak; done
cp: bak is a directory (not copied).
cp: test: No such file or directory
cp: 1: No such file or directory
cp: test: No such file or directory
cp: 2: No such file or directory
cp: test: No such file or directory
cp: 3: No such file or directory
要解決這個(gè)問題,當(dāng)然就要從單詞分隔符著手。而bash中使用的是$IFS(Internal Field Separator)這個(gè)變量,內(nèi)容為" \n\t":
keakons-MacBook-Pro:test keakon$ echo "$IFS" | od -t x1
0000000 20 09 0a 0a
0000004
keakons-MacBook-Pro:test keakon$ echo "" | od -t x1
0000000 0a
0000001
然后把它改成"\n\b",記得修改前先保存一下:
keakons-MacBook-Pro:test keakon$ IFS=$(echo -en "\n\b")
現(xiàn)在再執(zhí)行上述命令就正常了:
test 1
test 2
test 3
keakons-MacBook-Pro:test keakon$ for file in `ls`; do cp "$file" ../bak; done
keakons-MacBook-Pro:test keakon$ ls ../bak
test 1 test 2 test 3
最后,別忘了恢復(fù)$IFS:
keakons-MacBook-Pro:test keakon$ echo "$IFS" | od -t x1
0000000 20 09 0a 0a
0000004
keakons-MacBook-Pro:test keakon$ IFS=$(echo -en " \n\t")
keakons-MacBook-Pro:test keakon$ echo "$IFS" | od -t x1
0000000 20 0a 09 0a
0000004
相關(guān)文章
Linux系統(tǒng)links和elinks命令的基本使用教程
links和elinks都是Linux系統(tǒng)下的命令行瀏覽器,主要用于在終端中查看網(wǎng)頁內(nèi)容,這篇文章主要介紹了Linux系統(tǒng)之links和elinks命令的基本使用,需要的朋友可以參考下2023-09-09
統(tǒng)計(jì) cpu 內(nèi)存 使用率的shell腳本代碼
統(tǒng)計(jì) cpu 內(nèi)存使用率的腳本,有需要的朋友可以參考下2013-02-02
Linux 查看內(nèi)存插槽數(shù)、最大容量的方法
下面小編就為大家?guī)硪黄狶inux 查看內(nèi)存插槽數(shù)、最大容量的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
shell腳本實(shí)現(xiàn)公司項(xiàng)目部署交付環(huán)境預(yù)檢查的思路
這篇文章主要介紹了shell腳本實(shí)現(xiàn)公司項(xiàng)目部署交付環(huán)境預(yù)檢查的思路,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
linux shell txt轉(zhuǎn)換成html的實(shí)現(xiàn)代碼
這篇文章主要介紹了linux shell txt轉(zhuǎn)換成html的實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-11-11
Ubuntu服務(wù)器配置apache2.4的限速功能shell腳本分享
這篇文章主要介紹了Ubuntu服務(wù)器配置apache2.4的限速功能shell腳本分享,本文直接給出腳本實(shí)現(xiàn)代碼,代碼相關(guān)原理都寫在了注釋里,需要的朋友可以參考下2015-03-03
Linux服務(wù)器硬件運(yùn)行狀態(tài)及故障郵件提醒的監(jiān)控腳本分享
這篇文章主要介紹了Linux服務(wù)器硬件運(yùn)行狀態(tài)及故障郵件提醒的監(jiān)控腳本分享,能夠測試CPU和內(nèi)存的占用狀況以及HTTP端的異常,需要的朋友可以參考下2016-03-03
監(jiān)視磁盤使用情況的Shell腳本(本地+遠(yuǎn)程)
任何一個(gè)分區(qū)使用到90%就發(fā)送一個(gè)郵件給指定的收件人,到95%就在郵件主題出警告(warning),說明發(fā)送郵件程序EMAIL2013-01-01
shell之定時(shí)周期性執(zhí)行腳本的方法示例
這篇文章主要介紹了shell之定時(shí)周期性執(zhí)行腳本的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10

