如何复制具有通用名称的文件并将它们粘贴到另一个文件夹中?

Arn*_*old 5 command-line bash files

我想知道如何复制具有通用名称的文件并将它们粘贴到另一个文件夹中。

例如,我有文件夹 f1、f2、f3 ... f50。在每个文件夹中,都有名为 a#、b#、c#...z# 的文件。# 是一种随机数,它们在 f1, f2, f3 ... f50 中是不同的。

例如,我想a从所有 50 个f文件夹中复制文件并将它们粘贴到一个新文件夹中。

你能帮我做这个吗?

Zan*_*nna 8

我假设你的意思是你有一个类似的结构:

??? f1
?   ??? a1
?   ??? a2
?   ??? b1
?   ??? b2
?   ??? c1
?   ??? c2
??? f2
?   ??? a3
?   ??? a4
?   ??? b3
?   ??? b4
?   ??? c3
?   ??? c4
Run Code Online (Sandbox Code Playgroud)

并且您希望以这样的目录结束:

a-files
??? a1
??? a2
??? a3
??? a4
Run Code Online (Sandbox Code Playgroud)

假设:

  • 当前工作目录是所有目录的父目录 f1 f2 f3

你可以这样做:

mkdir a-files
for files in f*/a* ; do cp "$files" a-files ; done
Run Code Online (Sandbox Code Playgroud)

复制开始的所有文件a到一个新的目录a-files,从开始的所有目录f。您可以对以 b 开头的文件重复...

mkdir b-files
for files in f*/b* ; do cp "$files" b-files ; done
Run Code Online (Sandbox Code Playgroud)

注意:如果有任何重复的文件名,写入新目录的每个文件都会覆盖另一个具有相同名称的文件,因此在循环结束时,新目录将只有最后一个用该名称写入的文件的副本. 您可以使用该-n标志来cp防止覆盖,然后您将获得具有该名称的第一个文件而不是最后一个:

for files in f*/a* ; do cp -n "$files" a-files ; done
Run Code Online (Sandbox Code Playgroud)