美文网首页
Linux基础

Linux基础

作者: Bottle丶Fish | 来源:发表于2017-06-19 10:03 被阅读16次
    //批量移动
    # find ./ -name "*.tar.gz" | xargs -i mv {}  ./test/
    //批量解压
    # ls *.tar.gz | xargs -n1 tar xzvf
    

    解压缩
    文章转自Linux下的tar压缩解压缩命令详解

    tar
    -c: 建立压缩档案
    -x:解压
    -t:查看内容
    -r:向压缩归档文件末尾追加文件
    -u:更新原压缩包中的文件

    这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
    -z:有gzip属性的
    -j:有bz2属性的
    -Z:有compress属性的
    -v:显示所有过程
    -O:将文件解开到标准输出

    下面的参数-f是必须的
    -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

    # tar -cf all.tar *.jpg这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
    # tar -rf all.tar *.gif这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
    # tar -uf all.tar logo.gif这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
    # tar -tf all.tar这条命令是列出all.tar包中所有文件,-t是列出文件的意思
    # tar -xf all.tar这条命令是解出all.tar包中所有文件,-t是解开的意思
    

    由于Linux的tar命令不支持批量解压,所以很多网友编写了好多支持批量解压的shell命令,收集了一下,供大家分享:
    第一:
    for tar in *.tar.gz; do tar xvf $tar; donefor tar in *.tar.bz2; do tar xvf $tar; done

    第二: 用tar命令批量解压某个文件夹下所有的tar.gz文件
    ls *.tar.gz | xargs -n1 tar xzvf

    第三:
    find -maxdepth 1 -name "*.bz2"|xargs -i tar xvjf {}

    这条命令可解压当前目录下的所有bz2文件
    批量解压是比较郁闷的事,以前尝试各种方法,甚至用脚本循环语句解压都不行
    现在发现这条命令可以搞定,maxdepth表示搜索深度,1代表只搜索当前目录 第四:
    for i in $(ls *.tar);do tar xvf $i;done

    问题: 我想进行批量解压tar文件,使用tar -xvf .tar会出错,提示“Not found in archive”。解决方法有很多,比如写一个脚本之类的。 请问为什么tar不支持这种通配符语法呢?是否有特殊的原因? 我试过gzip就支gzip -d.tar.gz。 回答: 通配符是shell解决的问题 如 tar -xvf .tar 实际上执行tar时,tar接收到的是 tar -xvf a.tar b.tar c.tar … 如果当前目录跟本没有tar的东西,那么tar就收到’.tar’这个参数 与win不同,linux所有字符都可以作文件名,也即目录中不存在着 *.tar这个文件 为了防止 *.tar被shell解释为a.tar b.tar c.tar… 可以给它加个单引号
    用tar解开一个Archive时,语法是 tar -xvf <tarfile.tar> <tarfile.tar> 是选项f所要求的,只能是一个文件,比如myfiles.tar。 是myfiles.tar所包含的归了档的文件中的一个或者多个成员文件。如果是多个,可以用通配符。 先别跟我急,我知道,这些你是清楚的。但是,你的问题是,用了 tar -xvf *.tar 如楼上所说,tar接收到的是 tar -xvf a.tar b.tar c.tar … tar把你的意图理解为,在a.tar里解出b.tar c.tar …

    压缩
    tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg
    tar -czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
    tar -cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
    tar -cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
    rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux
    zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux

    解压
    tar -xvf file.tar //解压 tar包
    tar -xzvf file.tar.gz //解压tar.gz
    tar -xjvf file.tar.bz2 //解压 tar.bz2
    tar -xZvf file.tar.Z //解压tar.Z
    unrar e file.rar //解压rar
    unzip file.zip //解压zip

    总结
    1、.tar 用 tar -xvf 解压
    2、
    .gz 用 gzip -d或者gunzip 解压
    3、.tar.gz和.tgz 用 tar -xzf 解压
    4、.bz2 用 bzip2 -d或者用bunzip2 解压
    5、
    .tar.bz2用tar -xjf 解压
    6、.Z 用 uncompress 解压
    7、
    .tar.Z 用tar -xZf 解压
    8、.rar 用 unrar e解压
    9、
    .zip 用 unzip 解压

    VI下查找
    文章转载自Linux vi中查找字符内容的方法

    使用vi编辑器编辑长文件时,常常是头昏眼花,也找不到需要更改的内容。
    这时,使用查找功能尤为重要。
    方法如下:
    1、命令模式下输入“/字符串”,例如“/Section 3”。
    2、如果查找下一个,按“n”即可。
    要自当前光标位置向上搜索,请使用以下命令:
    /pattern Enter
    其中,pattern表示要搜索的特定字符序列。
    要自当前光标位置向下搜索,请使用以下命令:
    ?pattern Enter
    按下 Enter键后,vi 将搜索指定的pattern,并将光标定位在 pattern的第一个字符处。例如,要向上搜索 place一词,请键入:
    vi 查找替换大全
    vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。
    :s/vivian/sky/ 替换当前行第一个 vivian 为 sky
    :s/vivian/sky/g 替换当前行所有 vivian 为 sky
    :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
    :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
    n 为数字,若 n 为 .,表示从当前行开始到最后一行
    :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
    :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
    可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
    :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
    :%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
    1.:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
    :s/vivian/sky/g 替换当前行所有 vivian 为 sky

    1. :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
      :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
      (n 为数字,若 n 为 .,表示从当前行开始到最后一行)
    2. :%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky
      :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky
    3. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
      :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/
    4. 删除文本中的^M
      问题描述:对于换行,window下用回车换行(0A0D)来表示,Linux下是回车(0A)来表示。这样,将window上的文件拷到Unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。
      · 使用命令:cat filename1 | tr -d “VM” > newfile;
      · 使用命令:sed -e “s/VM//” filename > outputfilename。需要注意的是在1、2两种方法中,V和M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。
      · 在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/VM//。
      · :%s/^M$//g
      如果上述方法无用,则正确的解决办法是:
      · tr -d "r" < src >dest
      · tr -d "15" dest
      · strings A>B
    5. 其它
      利用 :s 命令可以实现字符串的替换。具体的用法包括:
      :s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
      :s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
      :.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
      :1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
      :g/str1/s//str2/g 功能同上
      从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索
      字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

    相关文章

      网友评论

          本文标题:Linux基础

          本文链接:https://www.haomeiwen.com/subject/nkkgqxtx.html