如何cp目录时忽略指定的目录和文件

   在备份ltedecoder程序时,需要把此目录拷由到bak目录下,但decoder目录下有个大文件,不需要备份,还有日志问题,也不需要备份,如何实现呢??

方法: 

   cd /source-dir

  find . -name .snapshot
-prune -o -print0 | cpio -pmd0 /dest-dir

解释: This command copies the contents of /source-dir to /dest-dir, but omits files and directories  named  .snapshot (and  anything in them).  The construct
-prune -o -print0  is quite common. The idea here is  that  the  expression  before  -prune  matches  things  which  are  to be pruned.  However, the -prune action itself returns true, so the following -o  ensures
that the right hand side is evaluated only for those directories which didn‘t get pruned (the  contents  of the pruned directories are not even visited, so their contents are irrelevant).  The expression on the right  hand side of the -o is in parentheses
only for clarity.  It emphasises that the -print0 action takes place only for  things  that  didn‘t have -prune applied to them.  Because the default `and‘ condition between tests binds more tightly than -o, this is the default anyway, but the parentheses
help to show what is going on.

此段的意思是:当找到name为.snapshot时,prune就会返回真,-o是或的意思,“或”的使用技巧是当左边的表达式为“真”时,则不会运算右边的表达式,当左边的表达式为假,则运算右边的表达式,即,当左边name不为.snapshot,则进行右边的表达式,右边的表达式意思是print文件名(包括路径的);当找到name为.snapshot时,则不打印文件名,这样就实现了把非.snampshot为命名的文件打印出来并交给cpio进行处理,cpio则把这些文件拷则的dest-dir中,实现忽略.snampshot文件的拷备(注:文件指文件夹或file名)。

         拓展: -prune -o \( ... -print0 \)

“\( ... -print0\)”这里可以使用find的查找文件的参数,如-name,-size等。

find . -name Persistence -prune -o \( \! -name ‘*log*‘ \! -size +100M -print0 \) | cpio -pmd0 /root/do_bak/ltedecoder 

上面则不仅忽略Persistence目录,还会忽略包涵log的文件或文件夹,还会忽略大于100M的文件。

注意: 你一定注意到了find 后面是“.”,代表当前目录,即此命令必须是pwd是你要拷则的目录里面,如你把sour-dir的文件进行拷则,则需要先cd $sour-dir。

如何cp目录时忽略指定的目录和文件,布布扣,bubuko.com

时间: 2024-10-29 19:11:07

如何cp目录时忽略指定的目录和文件的相关文章

java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中

/** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. *  * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件--过滤器FileNameFilter,将文件存入容器中 * 3.将容器中的内容遍历,写入到指定文件中 * */ 代码:  FilenameFilter 过滤器: package com.lp.ecjtu.File.filter; import java.io.File; import java.i

git提交时忽略指定文件

git提交时忽略指定文件 我们在项目开发过程中经常用到git来管理自己的项目,使用git版本控制进行多人协作开发具有许多优势,这里就不一一阐述了,有兴趣的同学可以自己去查找资料进行系统的学习.而本篇文章要说的是git使用过程中会遇到的一个问题,就是我们在项目开发过程中经常会修改一些配置文件 ,但是有的时候这些配置文件不需要被提交到远程仓库中,只在本地生效即可,此时就需要我们每次提交代码时把该文件给手动忽略,那么可不可以把该文件设置成永久忽略呢?答案肯定是有的,git的gitignore文件中可以

Python os模块实例之遍历目录及子目录指定扩展名的文件

需求:在该目录下有很多子目录(如下图,截图了部分),现要从该目录和所有子目录下找到所有扩展名为.meta的文件,并获取文件中第二行guid的值(': '后面的),然后将所有guid的值输出到另一文件中 .meta文件截图: 思路: 遍历当前目录的子目录,如果是文件并且扩展名为.meta,获取guid,写入到guid.txt:如果是子目录,则遍历子目录下的文件. 方法一: #!usr/bin/env python # -*- coding: utf-8 -*- import os outfile

怎样cp文件夹时忽略指定的文件夹和文件

在备份ltedecoder程序时,须要把此文件夹拷由到bak文件夹下.但decoder文件夹下有个大文件,不须要备份,还有日志问题,也不须要备份,怎样实现呢?? 方法: cd /source-dir find . -name .snapshot-prune-o-print0 | cpio -pmd0 /dest-dir 解释: This command copies the contents of /source-dir to /dest-dir, but omits files and dir

idea使用Git提交代码时忽略指定文件或文件夹

简述 使用idea编写代码并使用git作为版本控制器的时候,常常不需要提交配置文件以及一些其他不需要提交的文件,可以使用.ignore插件来在上传的时候忽略一些文件或文件夹. 安装 注意:安装完成之后要重启(restart)IDEA,插件才会生效. 配置   生成文件内容解释: 内容就是“禁止”提交更新的文件夹名称或文件类型.每个文件夹占一行. 补充: 禁止提交的文件夹在服务器(也就是GitHub)上面不能存在,如果存在的话你要先删除才可以.  禁止提交更新的文件或文件夹在项目目录中是灰色的.

TortoiseSVN 更新时忽略指定文件夹

命令行可以这么来svn update –set-depth=exclude 文件夹 那么TortoiseSVN客户端呢?在文件夹右键中的”更新至版本(U)”更新深度选”排除”,确定,搞定下次更新就不会再更新此目录要恢复的话在上级目录做相同操作,只是更新深度选择”全递归” TortoiseSVN 1.6以上支持

eclipse svn提交时忽略target .project .classpath等文件

Windows -> Preferences -> Team -> Ignored Resources里点 "Add Pattern", 把 target.project.classpath.settings 等输入添加

ShellExecuteA加载exe文件指定工作目录找不到文件的问题

使用ShellExecuteA调用exe文件时,指定工作目录需要注意 函数原型为: HINSTANCE ShellExecuteA( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd ); MSDN中对lpDirectory是这样说明的: [in] A pointer to a null-terminated string that spe

qt新进程工作目录的设置(工作目录确实是被子进程继承的,但也可以设置)

经过试验,qt启动一个新的进程时,这个进程的工作目录是继承父进程的,无论是通过start还是startDetached来启动. 其实对于linux系统,qt底层应该也是调用fork.exec之类的函数,对于fork,参看apue中文版第三版,有以下解析: 在f o r k之后处理文件描述符有两种常见的情况:(1) 父进程等待子进程完成.在这种情况下,父进程无需对其描述符做任何处理.当子进程终止后,它曾进行过读.写操作的任一共享描述符的文件位移量已做了相应更新.(2) 父.子进程各自执行不同的程序