!
也想出现在这里? 联系我们
广告位
当前位置:首页>教程分享>服务器教程>如何在递归复制文件时排除特定的文件扩展名?

如何在递归复制文件时排除特定的文件扩展名?

你可能已经知道,\'cp\'是Linux服务器中复制文件和目录的命令行程序。\'cp\'最简单、最常用的用法如下:

$ cp file1 file2 file3... fileN target_folder/

请注意,以上命令适用于文件以及“空”文件夹。它不适用于包含某些内容(文件或子文件夹)的文件夹。

要复制这样的文件夹,我们可以指定\'-r\'(递归)标识。

$ cp -r folder1 / folder2 / file1 file2 target_folder /

递归复制意味着复制文件夹下面的整个文件夹结构,即子文件夹和其中的文件,子文件夹内的子文件夹和其中的文件等。

这样就会复制所有的文件,而在\'cp\'命令内,没有办法根据某些参数来排除部分文件。例如,用户可能希望递归复制所有文件,除了子文件夹中的MP3(音频)文件之外,一直往下复制层次结构。

查找除特定文件扩展名以外的所有文件

为了达到这个目的,我们使用find命令,这是一个命令工具,简单来说就是根据文件或文件夹的参数:文件名、扩展名、大小等来搜索Linux中的文件和文件夹。

同理,在find命令中也有通过指定哪些文件应该被排除的方式来搜索文件。使用find定位特定扩展名的文件的语法是。

$ find  -name \'*.\'

例如,以递归方式定位当前文件夹中的所有MP3文件。

$ find . -name \"*.mp3\"

现在,要找到文件夹和子文件夹中的所有文件,除了MP3文件,使用find的 \"否定 \"操作符。

$ find . ! -name \"*.mp3\"

我们可以看到,现在除了MP3文件之外,所有的东西都被显示出来了,但是我们只想显示文件,因为这个输出以后会输入到\'cp\'。然而,我们只想显示文件,因为这个输出将在以后被输入到\'cp\'。现在,它同时显示文件和文件夹(例如\'temp1/\'),这将导致相同文件的重复拷贝。

要从输出中删除文件夹,只需使用参数\'-type f\'。这里\'f\'代表一个文件。

$ find . -name \'*.mp3\' -type f(f)

这样,我们现在只有递归获得的文件在\'test\'文件夹中。现在,我们可以继续将这个输出用管道传送到\'cp\'命令中。

递归复制文件时排除特定的文件扩展名

为此,我们使用\'xargs\'命令使\'cp\'将\'find\'的输出作为参数。另外,我们使用\'-t\'标识来指定目标目录,如果没有这个标识,程序就会将\'find\'的输出视为目标目录。

$ find  ! -name \'*.\' -type f | xargs cp -t 

示例:

$ find . ! -name \'*.mp3\' -type f | xargs cp -t Misc/

因此,除了\".mp3 \"文件外,所有递归找到的文件都被复制到了 \"Misc \"文件夹中。

在本文中,我们学习了如何在Linux服务器中递归复制文件,同时排除特定扩展名的文件。此外,还可以看看如何递归复制特定扩展名的文件。

给TA打赏
共{{data.count}}人
人已打赏
服务器教程

在Linux服务器中用Ping命令输出时间戳

2021-4-17 17:51:23

服务器教程

云服务器在Linux中CPU和内存使用前10的进程

2021-4-17 17:51:25

声明 本站上的部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。无意侵害您的权益,请发送邮件至 [email protected] 或点击右侧 私信:吉吉国王 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
OneEase