$7.49 .com domain with free InstantPage Website Builder$1.99 Web Hosting   捷飞网络官方淘宝店   Godaddy 优惠码
返回列表 发帖
分享到:




[Tools] tar 命令打包 排除某个或多个子目录 | AWK命令

下午遇到一个小问题:文件目录结构如下

  V' a: Y2 [& E  O% P/dir0-
1 E8 q+ C/ t! k" g-/dir1         <---该文件很大,欲排除
2 o0 ?& R& d( ?' H4 T-/dir2         <---该文件很大,欲排除
; x/ c8 M) l/ `, j-/dir3         <---目标目录之一
& u4 q2 \5 R7 Q8 c-index.php  <---目标文件之一  k8 r+ r/ i# H, j# a
.............以下省略N个子目录和子文件.............
" L4 n' [' M0 S5 V  X3 n/ u- j
目录下很多子目录,而我需要打包。目标是   /wwwroot 下所有子文件+/dir3 ,于是那些多余的子目录就让我头疼,, K  a1 ?0 N# i& _
怎样在不影响文件结构的情况下打包呢,搜索网上,很多人用下面这个方法:
( U) `; C3 R* \$ z
  1. tar cvzf \home\all.tar.gz dir0  --exclude dir1 --exclude dir2
复制代码

: p3 }2 q6 @7 k  `: p
5 f3 u# b8 d  T, i7 I7 }1 X$ U" e9 b但是并不好,要是排除的部分是多出,要是子目录过多,语句该要写多久啊,后来又发现网上说可以直接使用排除参数X
0 W* m3 V! G7 N& L新建文件excludefiles在当前目录中,内容为
7 i3 a4 C1 }3 `5 ]# l/ n" @2 a2 w  q+ x3 j; w* Y) W


  1. cat excludefiles
  2. dir1
  3. dir2
  4. tar -cvzf \home\all.tar.gz -X excludefile dir1
复制代码
0 C5 a" b% ^( k) R

8 m$ |8 l+ |- T0 G3 x3 v$ @3 j注意:
, L/ s; `0 |6 ]tar命令里面的目标文件是绝对路径格式,excludefile里面就也必须是绝对路径;
' N: m; }1 J8 B) H' n: y% btar命令里面的目标文件是相对路径格式,excludefile里面就也必须是相对路径;

& Y7 t1 X; c3 @: G后来 搜索找到了自力博客的一样问题的文章 说可以用 AWK 于是去搜索了一下它:Awk学习笔记 发现它提供的语句可以精简,可以这样写:6 B. P& J$ Q3 b
5 t3 N$ a: Z, s* w  R
  1. ls -l | awk '\^-\ {print  $8}' | xargs tar cvfz \home\dir0.tar.gz
复制代码

* |" n! Y- v: x) _0 M
# z2 w! q+ Z  d) ?! s# M这个语句很好理解:( z" I, q' G& l
ls -l 列出所有文件和目录
7 ]4 Z# J- R$ n' V3 s/ jawk '\^-\ {print $8}' 正则只保留文件行,获得第八列的所有文件名;5 p) F" Z" w  ?/ ?5 b' z$ \3 Y" v
xargs tar 把上一步得到的名称传参给tar命令。" x0 c1 n" q6 ^4 o( s" E
一切OK,轻松完成打包喽!

美国VPS、域名代购:http://tu8l.taobao.com

tar 命令打包 排除某个或多个子目录 它山之石

tar --exclude 使用体会:  ^% W) _% {4 f( H$ f! F

1 k3 V  k; n' \5 {+ a( ~; D目标:打包/usr/local下的这个文件夹目录sinon,并且不包含sinon里面的文件夹目录logs里面的内容。% T/ Z( i( U8 J+ O' G
当前目录 cd /usr/local/sinon  K) }) v* ?9 J; B( n3 z7 Q
操作:tar -cjvf sinon.tar.bz2 . --exclude=logs1 K# E4 [1 s# H
结果:打包顺利完成。& t  z9 f* D7 X- K
解压出现的问题:当使用  tar -xjvf sinon.tar.bz2    时,会把文件解压到当前目录下,而不是新生成的sinon文件夹下。
! K5 _0 `( H4 x3 v8 j操作:tar -cjvf sinon.tar.bz2 . --exclude=logs/
. y' h6 G2 `! y结果:失败,logs下的文件仍然被打包进来
/ |4 ?# y6 m6 R/ J9 x# c5 b) H, |/ ~' g5 ^  s
当前目录 /usr/local      5 j/ x! V" B5 \" E5 E
操作:tar -cjvf sinon.tar.bz2 sinon --exclude=sinon/logs/3 D# _- d- m6 `% l: P9 x; x$ o
结果:这个命令将会打包当前目录下的sinon文件夹,但其--exclude选项并没起作用,logs文件夹下的文件还是被打包进来。
! R$ G7 u; o7 A, _- `( v
+ \1 E5 |; U7 v操作:tar -cjvf sinon.tar.bz2 --exclude=sinon/logs/ sinon
# e9 T2 f+ n" g3 W1 A结果:这个命令将会打包当前目录下的sinon文件夹,但其--exclude选项并没起作用,logs文件夹下的文件还是被打包进来。# D- X+ D5 D9 W* l
其他测试操作:tar -cjvf sinon.tar.bz2 sinon --exclude=./sinon/logs/
1 d; m) _/ `5 r/ w                        tar -cjvf sinon.tar.bz2 sinon --exclude=./sinon/logs/*.*+ h- Z8 F" w* w3 R& o7 k
                        tar -cjvf sinon.tar.bz2 sinon --exclude=./sinon/logs5 d2 R" l6 N* B& s( j7 Q7 S  s
结果:以上命令将会打包当前目录下的sinon文件夹,但其--exclude选项并没起作用,logs文件夹下的文件还是被打包进来。8 H) m# }7 v; Y- ], u
成功结果:  tar -cjvf sinon.tar.bz2 sinon --exclude=sinon/logs
& Y7 q2 Y. P8 N: M  或者          tar -cjvf sinon.tar.bz2 --exclude=sinon/logs sinon
/ z1 Q- F1 T: d9 i/ J+ m, W* c解压效果也良好:先在当前目录下生成文件夹sinon,再在sinon下解压1 Y* x6 J" F. \/ \, y8 U3 ]& Z
7 v! X" ~, G$ O
参考:
  1. http://hi.baidu.com/sorbia/blog/item/dffc56f880b34175024f5602.html
复制代码




TOP

返回列表
Namecheap
Namecheap.com - Cheap domain name registration, renewal and transfers - Free SSL Certificates - Web Hosting
互联网安全