[問題] FTP規劃及ShellScript如何使用包含空白的變數

看板Linux作者 ([ 慢! ])時間16年前 (2010/03/05 18:30), 編輯推噓1(1013)
留言14則, 4人參與, 最新討論串1/1
問題是這樣的 我架了個FTP,使用pureftpd,作業系統是Ubuntu 9.10。目前FTP的目錄 是這樣規劃的: 硬碟及資料目錄 sda3: /ftp sdb1: /ftp/sdb1/Animation /ftp/sdb1/Drama /ftp/sdb1/Europe /ftp/sdb1/Asia /ftp/sdb1/English A-S sdc1: /ftp/sdc1/English T-Z 使用者(虛擬帳號)目錄: /ftp/home/alpha /ftp/home/beta /ftp/home/charlie 規劃上想要讓使用者只能在家目錄下活動,所以使用了chroot(),再使用pureftpd 支援的symbolic link(ln -s)將各別的資料目錄連結到各別的使用者家目錄下。又 想說既然支援symbolic link的話,因為資料頗多可以弄個分類,這樣使用者要找 東西也比較好找,所以關於各別使用者的家目錄規劃如下(以alpha為例): /ftp/home/alpha/Drama /Animation /Movie by Language(原始目錄已經有語言分類) /Movie by Alphabet(就是複製全部到這裡面讓他依照字母排序) /Movie by Decades(以資料夾最後的年份排序) /Movie by IMDb(尚未想到,想說在年份後面再加上#1,#2或許吧) 另外說明一點,關於資料夾名稱大致如下: Saw I 奪魂鋸一 (2004) The Wrestler 力挽狂瀾 (2008) (DVD) おくりびと 送行者:禮儀師的樂章(2008) 風聲 (2009) 有英文中文日文,也沒有固定的欄位,大致上是原文片名、中文片名、年份,但是 有的會有多一些符號像是":"、"-"或是像Saw I 奪魂鋸 I (2004)沒有固定的空格。 現在的想法是做一個依照上述分類的sample資料夾,之後再複製到各個使用者家目 錄。現在問題在我想要自動化管理,也就是寫script來做相關的事情。 結果第一步就遇到問題了。就是變數名稱(也就是資料夾名稱)有許多空格,執行 的時候會到空格就停住了,但是echo $name是可以顯示出空格的。可是這個包含 空格的$name拿給test用或是ln -s用就會到空格就停住而出現錯誤。 我想這裡強者很多,應該很多人會遇到使用空格當資料夾名稱的問題,版上搜尋 有找到兩篇,但是我也是用read跟while卻不行。如果真的不能使用空格當資料夾 名稱的話...那我只好把空格取代成別的符號了(linux這麼強大應該可以吧!), 這一步沒先解決的話,之後想要寫新增資料夾同步到各別的使用者家目錄或是其他 事情都沒辦法做了。 以下附上script寫法,請各位強者解答!先謝過了! # Set all movie directory Asia=/ftp/sdb1/Asia Europe=/ftp/sdb1/Europe EnglishT=/ftp/sdb1/English\ T-Z EnglishA=/ftp/sdc1/English\ A-S Alpha=/ftp/dir_sample/Movie\ by\ Alphabet for dir in $Asia $Europe $EnglishT $EnglishA do ls $dir | while read name do test -e $dir/$name || ln -s $dir/$name $Alpha/$name done done -- 花繁柳密處撥得開方見手段 濃雲密霧中看得見才是本領 風狂雨急時站得住才是功夫 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.101.50

03/05 18:51, , 1F
把IFS改成換行號試試
03/05 18:51, 1F

03/05 18:51, , 2F
像是IFS="
03/05 18:51, 2F

03/05 18:51, , 3F
"
03/05 18:51, 3F

03/05 19:01, , 4F
今天試了一個下午,有改過IFS=newline不行,不過是怎樣
03/05 19:01, 4F

03/05 19:01, , 5F
不行已經忘記了,今天下午試了很多方法都不行。
03/05 19:01, 5F

03/05 19:14, , 6F
你不會真的打newline吧?
03/05 19:14, 6F

03/05 19:14, , 7F
最簡單改掉空格的方法是跑rename " " "" * 很多次
03/05 19:14, 7F

03/05 19:15, , 8F
這會把空格消除掉
03/05 19:15, 8F

03/05 19:54, , 9F
樓上的id好好玩喔!
03/05 19:54, 9F

03/05 20:44, , 10F
對不起,我還真的打newline,我是看man bash裡<new-line>
03/05 20:44, 10F

03/05 20:45, , 11F
目前測試應該是可以,感謝chroot的幫忙,那我寫一些
03/05 20:45, 11F

03/05 20:45, , 12F
script之後再跟大家分享。
03/05 20:45, 12F

03/05 20:47, , 13F
請問這樣改IFS在執行script其他指令不會有問題嗎?
03/05 20:47, 13F

03/05 22:08, , 14F
我會把var加 "$var"
03/05 22:08, 14F
文章代碼(AID): #1BaDr8OT (Linux)
文章代碼(AID): #1BaDr8OT (Linux)