作者raynoz (Raynoz)
看板Linux
标题[问题] shellscript档案有空格如何筛选跟tar
时间Thu Aug 12 07:19:52 2021
不好意思又是我...
但我已经找遍各种方法都无解 只好再来麻烦各位(可能方向错误)
是这样的我在我的资料夹/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://webptt.com/cn.aspx?n=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
1F:→ observer0117: 空格,加双引号 " 试试? 08/12 08:22
2F:→ observer0117: 目录在後面加 / 试试?或者先 test 目录是否存在 08/12 08:22
3F:推 chang0206: rm 那段有问题吧 不会删到你说的 Ray目录才对 08/12 10:28
4F:→ chang0206: 打包的话 用find 加上 exec 试试看 08/12 10:29
6F:推 Gold740716: rm 无法再现 08/12 14:48
7F:推 Gold740716: 你是不是执行 ls $last_month* 的资料夹错了? 08/12 14:50
9F:→ sppmg: -into-tarball-command/ 08/12 21:23
10F:→ sppmg: 基本概念就是find输出列表、tar -T 用档案形式取得档案列表 08/12 21:30
12F:→ gusion: 写了个sample code给你参考 08/13 01:03
13F:→ gusion: 有用到bash的process substitution 08/13 01:04
14F:→ gusion: 我看之前的文章是用bash,为了方便就直接这样写 08/13 01:06
15F:→ raynoz: 大家不好意思 关於档案删除的问题 我描述错误了... 08/13 07:39
16F:→ raynoz: 我的写法是rm -rf /NAS/Ray/$file 用意是想要包起来後 08/13 07:41
17F:→ raynoz: 把旧的档案删掉 但如果$file 筛选到的是资料夹 则正常work 08/13 07:42
18F:→ raynoz: 但如果$file 筛选出来的是档案(xls档) 似乎就会变无效 08/13 07:42
19F:→ raynoz: 反而把/NAS/Ray的Ray资料夹删掉了 08/13 07:43
20F:→ raynoz: 这部分已经有解出来了 感谢大大们提供的方向 後来是用find 08/13 08:00
21F:→ raynoz: 才有成功!! 真的超感谢大家!!! 08/13 08:01