如何使用 Linux cp 命令复制不同目录中的多个文件?

如何使用 Linux cp 命令复制不同目录中的多个文件?

你能帮我弄清楚该怎么做吗?

假设在这个目录下:

/home/user1/

有100个文件夹,这些文件夹的名称分别为1、2、3......到100。每个文件夹中有26个文件。

  • 文件夹1中的文件的名称为1a,1b......到1z。
  • 文件夹2中的文件的名称为2a,2b......到2z。
  • 文件夹100中的文件的名称为100a,100b......至100z。

如何将所有以 z 结尾的文件复制到新文件夹?

答案1

使用通配符。

cp /home/user1/*/*z newfolder/

一些通配符包括*?[]

*匹配任意数量的字符,可以是任意字符

?匹配一个字符,可以是任意字符

[]匹配定义字符范围内的一个字符

例子:

[jin@crypt /tmp] % ls foo/*/* 
foo/bar/1a  foo/bar/1c  foo/baz/1a  foo/baz/1c  foo/baz/2d  foo/quux/1b foo/quux/1d
foo/bar/1b  foo/bar/1d  foo/baz/1b  foo/baz/1d  foo/quux/1a foo/quux/1c foo/quux/3d

[jin@crypt /tmp] % ls foo/*/*d
foo/bar/1d  foo/baz/1d  foo/baz/2d  foo/quux/1d foo/quux/3d

[jin@crypt /tmp] % ls foo/ba?/*d
foo/bar/1d  foo/baz/1d  foo/baz/2d

[jin@crypt /tmp] % ls foo/ba??/*d
zsh: no matches found: foo/ba??/*d

[jin@crypt /tmp] % ls foo/baz/*[a-c]
foo/baz/1a  foo/baz/1b  foo/baz/1c

答案2

使用查找命令:

find . -type f -name \*z -exec cp {} newfolder/ \;

这看起来有点复杂,所以我将其分解一下。

Find 会在您指定的位置及下方查找文件。点本身表示“当前目录”。下一个参数“-type f”表示“查找文件类型的东西”。“-name *z”表示“以及名称与“*z”匹配的东西”。接下来,“-exec cp {} newfolder/”表示对找到的项目执行 cp 命令 - 该命令用匹配的文件名替换 {}。最后,“\;”终止 exec 命令字符串 - 错过它,您将收到错误。

如果您只是想查看匹配的文件,请执行以下操作:

find . -type f -name \*z -print

这只会将匹配的文件打印到屏幕上。

这应该可以在几乎任何 Linux、UNIX 或 Mac 终端上运行。

相关内容