linux文件夹内文件复制,如何排除某个文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux文件夹内文件复制,如何排除某个文件相关的知识,希望对你有一定的参考价值。

Linux中在复制一个目录时排除其中的某个文件,方法案例如下:
#新建一个test1目录
[oracle@prod ~]$ mkdir test1
#新建一个test2目录
[oracle@prod ~]$ mkdir test2
#进入test1目录
[oracle@prod ~]$ cd test1
#在test1目录新建5个txt文件
[oracle@prod test1]$ touch 1.txt 2.txt 3.txt 4.txt zhidao.txt
#然后复制test1目录文件到test2目录,排除zhidao.txt
[oracle@prod test1]$cp `ls | grep -v zhidao.txt | xargs` ../test2
#进入test2目录
[oracle@prod test1]$ cd ../test2
#查看test2目录文件,已经排除了zhidao.txt
[oracle@prod test2]$ ls -lt
total 0
-rw-r--r-- 1 oracle oinstall 0 Mar 10 17:20 1.txt
-rw-r--r-- 1 oracle oinstall 0 Mar 10 17:20 2.txt
-rw-r--r-- 1 oracle oinstall 0 Mar 10 17:20 3.txt
-rw-r--r-- 1 oracle oinstall 0 Mar 10 17:20 4.txt
参考技术A 我想把挂载的文件夹
复制一份到
我自己建的文件夹下
该怎么操作
比如/home
和/aaa
把/home下的文件包括隐藏文件,复制到/aaa
我用cp
-r
/home
/aaa
结果把整个/home复制到/aaa下了。
又用cp
-r
/home/*
/aaa
结果隐藏文件又没复制过去。
我只想用一条命令。不要再用cp
-r
/home/.*
/aaa
有人有办法吗?
还有就是如果不想把文件夹里面的“.”“..”两个复制过去,怎么办。
网上看到有人说用正则式,不过我刚接触linux,不是很懂。而且他上面的符号没标清楚,分不清楚单引号反引号。有简单点的吗?
参考技术B linux中可以使用通配符来排除某个文件或目录
!(aaa)表示排除aaa文件或目录
!(aaa|bbb)表示排除aaa和bbb文件或目录
[!ab]*表示排除以字符a或b开头文件或目录
例:
某目录下包含文件:a aa b bb c cc和目录bak
mv !(a|bb|bak) bak/ 表示排除文件a、bb和目录bak,其他文件移动到bak目录下
mv [!ab]* bak/ 表示排除文件a、aa、b、bb和目录bak,只将文件c和cc移动到bak目录下
使用cp复制效果一样。
参考技术C cp命令
格式:
cp
[选项]
源文件或目录
目的文件或目录
选项说明:-b
同名,备分原来的文件
-f
强制覆盖同名文件
-r
按递归方式保留原目录结构复制文件
cp
-r
/tmp/a
/root/a
记得有空格
参考技术D 譬如/abc/
目录下有几百个类似summary1003.dat
,summary1004.dat
这样的文件,如何拷贝部分文件到另一个目录下呢》
假设有一个文件夹叫a,a下面包含若干文件,还有一个b文件夹,此时我想罗列出所有a文件夹下的所有文件,而需要排除b文件夹下的文件。我现在是这么做的。
find
./a
-type
f
|
grep
-v
'b'
但是我想find应该支持一种更有加的方式。

linux tar压缩排除某个文件夹

一般直接用tar命令打包很简单,直接使用 tar -czvf test.tar.gz test 即可。

在很多时候,我们要对某一个目录打包,而这个目录下有几十个子目录和子文件,我们需要在打包的时候排除其中1、2个目录或文件。

这时候我们在用tar命令打包的时候,增加参数 --exclude 就能达到目的。

例如:

我们以tomcat 为例,打包的时候我们要排除 tomcat/logs 目录,命令如下:

tar -zcvf tomcat.tar.gz --exclude=tomcat/logs tomcat

如果要排除多个目录,增加 --exclude 即可,如下命令排除logs和libs两个目录及文件xiaoshan.txt:
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/libs --exclude=tomcat/xiaoshan.txt tomcat

这里要说一下注意事项:

大家都知道linux在使用tab键的时候会对目录名称自动补全,这很方便,大家也比较常用。

如我们输入 tomcat/lo 的时候按tab键,命令行会自动生成 tomcat/logs/ ,对于目录,最后会多一个 “/”

这里大家要注意的时候,在我们使用tar 的--exclude 命令排除打包的时候,不能加“/”,否则还是会把logs目录以及其下的文件打包进去。

错误写法:
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs/ --exclude=tomcat/libs/ tomcat
正确写法:
tar -zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/libs tomcat

以上是关于linux文件夹内文件复制,如何排除某个文件的主要内容,如果未能解决你的问题,请参考以下文章

linux文件夹内文件复制,如何排除某个文件

linux tar压缩排除某个文件夹

linux tar压缩排除某个文件夹

linux使用tar命令打包压缩时排除某个文件夹或文件

Linux的du用法排除某个目录

linux下面tar打包, 排除某个特定的目录( 只对一个目录操作, 不对其他目录操作)