下午遇到一个小问题:文件目录结构如下
/dir0-
-/dir1 <—该文件很大,欲排除
-/dir2 <—该文件很大,欲排除
-/dir3 <—该文件很大,欲排除
-/dir4 <—目标目录之一
-index.php <—目标文件之一
………….以下省略N个子目录和子文件………….
目录下很多子目录,而我需要打包。目标是 /wwwroot 下所有子文件+/dir1+/dir2 ,于是那些多余的子目录就让我头疼,
怎样在不影响文件结构的情况下打包呢,很多人会用下面这个方法:
tar cvfz dir0.tar.gz test –exclude dir1 –exclude dir2
但是并不好,要是排除的部分是多出,语句该要写多久啊,还不如直接 MV 之后再打包,然后MV回来。
后来 嵩爷 说可以用 AWK 于是去搜索了一下,反复测试之后,可以这样写:
ls -l | grep "^-" | awk '{print $8}' | xargs tar cvfz dir0.tar.gz
这个语句很好理解:
ls -l 列出所有文件和目录;
grep "^-" 剔除其中的子目录;
awk '{print $8}' 获得排除子目录后的所有文件名;
xargs tar 把上一步得到的名称传参给tar命令。
子目录已排除,别的问题就迎刃而解,果断打包喽!至于其他的SSH下常用命令,
可以看这个页面
SSH命令,过段时间总结一下,从新写个小页面,要不然总是查这个混乱排版的很纠结!
- Pingback on 2010/04/25/ 23:02 
换主机时用SSH最爽
@帅哥, 是的,比ftp方便多了,特别是打包这个功能
我是纯外行,一点没看懂
@万戈, 老万还没开始折腾主机,开始了就犀利了
嘿嘿,用jiathis收藏之。
@番茄, 搜了下jiathis,不错的网站,我居然都没用过。
这个很有用,ssh里面需要
@zwwooooo, 嗯,我用的还是少了点,要多练习啊
ls -l | awk ‘/^-/{ print $8}’ |xargs tar cvzf /home/all.tar.gz
就可以了。
@a18ccms, 你的意思是grep “^-” 有点重复,事么?我去试试
@HzlzH, 也算不上重复。只是awk也能实现正则了。也没剩几个字。呵呵。我也参考你的和我之前搜索到的文章写了一个,已经PingBack了。呵呵~~
@a18ccms, 嗯,测试可用。这样写更精简,但是可读性不强了。
@HzlzH, 呵呵。恩。是没有那个直观。精简的代价~~我申请友链了~~已经添加你了。呵呵
@a18ccms, 嗯,刚刚发现,已经通过了,多多交流,共同进步
@HzlzH, 恩。把你Blog放订阅里。呵呵~~~睡觉去了。晚安哦~
@a18ccms, 已订,我也早点睡吧