在终端中复制文件时排除文件扩展名

命令行是一个强大的工具,因为我们可以在一行中将一个命令的输出重定向到另一个命令,在这种情况下,我们会将 find 命令的输出重定向到 cp 命令。 在本教程中,我将向您展示怎样在从源复制到目标时排除具有特定扩展名的多个文件。 我们将在 find 和 cp 命令的帮助下完成此操作。 首先,让我们了解它们的功能:

目录

cp 命令

cp 命令用于在 Linux 的命令行中复制文件和文件夹。 你可以简单地输入

cp file1 file2 file3 destination/folder

将文件复制到目标文件夹。 或者,如果要将文件夹复制到其他目的地,则必须使用 -r (递归)选项如下:

cp -r directory1/ directory2/ desitination/folder

递归选项意味着存储在给定目录中的所有文件夹和子文件夹也将被复制。 但是,没有任何方法可以让我们在复制时单独使用 cp 命令来排除文件扩展名(比如 mp3)。 这就是我们需要 find 命令的地方。

Linux中的cp命令

查找命令

Linux 中的 find 命令可用于列出所有包含特定名称或字符的文件和文件夹。 我们可以通过搜索所有文件并忽略具有某些扩展名的文件来利用此功能。 为了 example,在 LFD 目录中,我们有一些图片、mp3 和文本文件,现在要列出所有 mp3 文件,我们必须键入:

find . -name "*.mp3"
列出所有 Mp3 文件

如果我们希望列出除 mp3 之外的所有文件,我们只需添加一个感叹号 (!)

find . ! -name "*.mp3"
列出除 Mp3 之外的所有文件

该命令的输出还列出了所有目录,要将它们从搜索结果中排除,我们必须添加 -type f 选项,这里 f 代表文件。

find . ! -name "*.mp3" -type f
使用类型 F 从结果中删除目录使用 -type f 从结果中删除目录

伟大的! 现在让我们使用该命令借助命令行的管道功能将除 mp3s 之外的所有文件从当前目录复制到另一个位置。

在 Linux 中查找文件时排除目录

复制所有文件,除了…

除了管道,我们还需要使用“xargs”命令让“cp”将“find”命令的输出视为参数。 我们还将在 cp 命令中添加 -t 选项以将目标文件夹设置在其他位置,否则,它将简单地将所有文件复制到同一目录。 要复制除 mp3 以外的所有文件,我们只需键入:

find . ! -name "*.mp3" -type f | xargs cp -t Destination/Folder
将除 Mp3 以外的所有文件复制到文档将除 Mp3 以外的所有文件复制到文档

概括

我们希望通过这篇文章,您能够了解有关 find 和 cp 命令的更多信息,并且您能够使用命令行界面有效地复制所有文件,因为像这样使用 GUI 复制会花费很多时间,因为您将有选择单个文件。