[問題] shellscript檔案名稱有空格如何篩選跟tar

看板Linux作者 (Raynoz)時間3年前 (2021/08/12 07:19), 3年前編輯推噓6(6015)
留言21則, 6人參與, 3年前最新討論串1/1
不好意思又是我... 但我已經找遍各種方法都無解 只好再來麻煩各位(可能方向錯誤) 是這樣的我在我的資料夾/NAS/Ray內放了以下檔案 20210615 - A.xls 20210720 - A.xls 20210725 - A.xls 20210803 - A.xls 而我想要在每個月1號將上個月的資料全部打包命名為年+月 像是8/1 將檔名開頭為202107的檔案打包命名為2107.tar.gz 我的寫法: last_month=$(date -d "$date +%Y%m)01 last month" +%Y%m) file=$(ls $last_month*) cd /NAS/Ray/ tar -zcvPf /NAS/Ray/2107.tar.gz $file 執行後顯示錯誤訊息 ls: cannot access '202107*': no such file or dierctory 但如果我直接到該路徑輸入 ls 202107* 是會正常顯示出開頭有202107的檔案 剛剛亂try(印象中是將ls改用find去找檔案) 有成功讀到檔案 但tar的時候就有問題了 錯誤訊息變成 tar: ./20210701: cannot stat:no such file or directory tar: -: cannot stat:no such file or directory tar: A.xls: cannot stat:no such file or directory 看起來是因為有空格的關係 變成三個檔案 這部分file變數該怎麼寫才能篩選月份又能忽略空格呢 另外還有遇到一個問題 如果要刪除目錄 使用rm -rf rm -rf /NAS/Ray/123 如果Ray目錄下如果沒有123 會把目錄Ray刪掉 這部分怎麼解決呢 有查到使用-r會遞迴刪除 但刪目錄又必須加上-r 這部分是否只能先cd過去 再rm -rf 123呢 以上問題在麻煩大家了 糾結好久好痛苦QQ 拜託大家了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.75.6.134 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1628723994.A.361.html ※ 編輯: raynoz (211.75.6.134 臺灣), 08/12/2021 07:20:18 ※ 編輯: raynoz (211.75.6.134 臺灣), 08/12/2021 07:30:09

08/12 08:22, 3年前 , 1F
空格,加雙引號 " 試試?
08/12 08:22, 1F

08/12 08:22, 3年前 , 2F
目錄在後面加 / 試試?或者先 test 目錄是否存在
08/12 08:22, 2F

08/12 10:28, 3年前 , 3F
rm 那段有問題吧 不會刪到你說的 Ray目錄才對
08/12 10:28, 3F

08/12 10:29, 3年前 , 4F
打包的話 用find 加上 exec 試試看
08/12 10:29, 4F

08/12 10:32, 3年前 , 5F

08/12 14:48, 3年前 , 6F
rm 無法再現
08/12 14:48, 6F

08/12 14:50, 3年前 , 7F
你是不是執行 ls $last_month* 的資料夾錯了?
08/12 14:50, 7F

08/12 21:23, 3年前 , 8F

08/12 21:23, 3年前 , 9F
-into-tarball-command/
08/12 21:23, 9F

08/12 21:30, 3年前 , 10F
基本概念就是find輸出列表、tar -T 用檔案形式取得檔案列表
08/12 21:30, 10F

08/13 01:02, 3年前 , 11F

08/13 01:03, 3年前 , 12F
寫了個sample code給你參考
08/13 01:03, 12F

08/13 01:04, 3年前 , 13F
有用到bash的process substitution
08/13 01:04, 13F

08/13 01:06, 3年前 , 14F
我看之前的文章是用bash,為了方便就直接這樣寫
08/13 01:06, 14F

08/13 07:39, 3年前 , 15F
大家不好意思 關於檔案刪除的問題 我描述錯誤了...
08/13 07:39, 15F

08/13 07:41, 3年前 , 16F
我的寫法是rm -rf /NAS/Ray/$file 用意是想要包起來後
08/13 07:41, 16F

08/13 07:42, 3年前 , 17F
把舊的檔案刪掉 但如果$file 篩選到的是資料夾 則正常work
08/13 07:42, 17F

08/13 07:42, 3年前 , 18F
但如果$file 篩選出來的是檔案(xls檔) 似乎就會變無效
08/13 07:42, 18F

08/13 07:43, 3年前 , 19F
反而把/NAS/Ray的Ray資料夾刪掉了
08/13 07:43, 19F

08/13 08:00, 3年前 , 20F
這部分已經有解出來了 感謝大大們提供的方向 後來是用find
08/13 08:00, 20F

08/13 08:01, 3年前 , 21F
才有成功!! 真的超感謝大家!!!
08/13 08:01, 21F
文章代碼(AID): #1X55iQDX (Linux)
文章代碼(AID): #1X55iQDX (Linux)