在Linux上将一个文件复制到多个目录中

评论 0 浏览 0 2019-09-09

1.概述

在本教程中,我们将学习如何在Linux上复制一个文件到多个目录。这些命令可以在任何POSIX shell上使用,包括bash

2.对单一目录

我们可以使用cp命令,很简单地将文件复制到一个单一的目录。

cp source1 source2 ... directory

cp虽然只需要一个目标目录。

那么,我们如何将一个文件复制到多个目录中呢?

2.Shell 循环

让我们试试用循环来重复复制命令。这将把favicon.ico文件复制到dir-1dir-2

for i in dir-1 dir-2; do cp favicon.ico ${i}/; done

i变量后面的斜线确保我们复制到一个目录而不是一个文件。大括号不是必须的,但它们可能有助于提高可读性。

3.处理特殊字符

让我们看看如何处理更多的奇特的文件名。

我们应该记住,在Linux上,文件名中允许出现各种字符。这包括空格、标点符号,甚至表情符号和换行符。除了斜线和null字符,任何东西都可以出现在文件名中。

如果我们不正确地引用这些名字,它们将在我们的shell脚本中造成严重的破坏。

让我们使用带引号的文件名,并对i变量进行引用。

for i in "I'm a directory!" 'Another directory'; do cp favicon.ico "${i}/"; done

4.通配符匹配

如果我们想通过一些搜索标准动态地提供目的地目录,该怎么办?

例如,让我们把favicon文件复制到/var/www内的所有目录,但仅限于以staging结尾的目录,比如/var/www/recipe-site-staging

find /var/www -maxdepth 1 -iname '*staging' -type d -exec cp -- favicon.ico '{}' ';'

find将搜索/var/www,以寻找指定的目录。

在这个例子中,我们通过使用-maxdepth 1来寻找直接位于/var/www内的目录,而不是多级的目录。这确保了例如/var/www/site-staging将被匹配,但/var/www/static/site-staging则不会。

-iname是我们要寻找的目录名称的不区分大小写的模式,其中*是通配符。

-exec是一个方便的参数,它表明在每个目录上运行什么命令

而我们要运行的命令是 cp — favicon.ico <directory-name>双破折号是为了终止cp‘的选项列表。这可以确保一个名为–force的目录不会意外地成为cp命令的选项。

花括号指示在我们的命令中放置目录名称的位置。我们用分号表示命令的结束。

注意,我们把大括号和分号放在单引号里,这样它们就不会被shell解释了。

5.总结

在这篇快速而直接的文章中,我们着重介绍了将一个文件复制到多个目录–;对于预定义和通配符的输入。

最后更新2022-11-24
0 个评论
标签