你能帮我弄清楚该怎么做吗?
假设在这个目录下:
/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 终端上运行。