复制文件列表

复制文件列表

我有一个目录,其中有大量文件需要复制到另一个目录。请记住,并非所有文件都需要复制,只需复制其中的一些文件。有没有一种方法可以让我想出一个脚本将所有这些需要的文件从一个目录复制到另一个目录,而不是一个一个地执行。

答案1

鉴于您对 user79914 响应的评论,听起来您必须在常规旧cp命令中明确列出要复制的文件。像下面这样的东西应该可以完成这项工作:

cp FILE_1 FILE_2 FILE_3 /destination/directory

例如,如果您将多次执行复制操作,则可以执行如下操作:

for FILE in $(cat ./list_of_files.txt)
do
    cp ${FILE} /destination/directory
done

此示例假设您已将所需文件的列表添加到文本文件中list_of_files.txt。这种方法的好处是,您可以将需要复制的任何新文件添加到您的list_of_files.txt文件中,特别是当您必须多次执行复制时。

有关更多此类示例,请查看此链接:

https://www.cyberciti.biz/faq/bash-for-loop/

答案2

最简单的方法不需要您具备任何脚本编写能力。它只需要一个文本编辑器。当然,有更优雅和更通用的方法来做到这一点,但有时,如果您的脚本技能处于新手水平,人们只想完成一项即时任务,而不必绕道进行大量的学习曲线攀登等。

假设您有一个名为 的文件myfiles.txt,其中包含要复制的每个文件名的列表,一个到一行。我假设:

  • 您列表中的文件少于一百万个
  • 每行myfiles.txt包含该源文件的正确路径和文件名
  • 您要将文件复制到的目录路径是test并且它已经存在
  • 文件名中没有有问题的字符,例如引号、撇号、换行符等。

现在说:

vi myfiles.txt
:%s/^/cp -vp '/
:%s-$-' test/-
ZZ

这将编辑文件列表以放置cp -vp '在每行(每个文件名)的开头,并放置' test/在每个文件名的末尾。

现在您有了一个包含 N 个命令的列表cp,这些命令会将您的 N 个文件复制到该test/目录中。你可以这样执行它:

sh < myfiles.txt

瞧。

答案3

如果文件具有相似的名称,您可以使用通配符,例如cp test* ~/test/将所有以 'test' 开头的文件复制到 ~/test 目录。

要复制目录中的可见(非点)文件,您可以cp ./* ~/test/这样做。

相关内容