将以'a' 'c'或'e'开头的前N个文件从一个文件夹复制到Linux中的另一个文件夹

Copy first N files which start with 'a' 'c' or 'e' from one folder to another in Linux

我在指定目录中有很多文件。例如,我想将其中的 6 个复制到一个位置。 我想到了这个:

find . -type f |head -6| xargs cp /specified_dir/[ace]* -t /target_loc

问题是每个以 'a' 'c' 'e' 开头的文件都会被复制。应该有前 6 个文件,但我收到 8 个(4 个 'a',3 个 'c',1 个 'e')。 我在想,有没有办法解决这个问题。

使用您的命令,您只能获得 find 的前 6 个结果(不是以 [ace] 开头的文件),但您最终执行的是此命令:

cp /specified_dir/[ace]* -t /target_loc <file_argument>

将所有 [ace]* 文件加上通过 xargs 提供的 <file_argument> 复制到目标位置。然后你执行这个命令 6 次。


你想要的是首先找到 [ace]* 文件,获取其中的前 6 个(就像你对 head 所做的那样)并写最后一个没有要复制的文件的命令,这个参数将是由 xargs.

提供
find . -type f -name "[ace]*" | head -6 | xargs cp -t /target_loc

现在这是错误的或者至少是不安全的,因为不会处理例如带有空格的文件名。所以你可以使用这个语法:

find . -type f -name "[ace]*" | head -6 | xargs -I{} cp {} -t /target_loc

-I 设置替换字符串,因此当它稍后存在时,它表示引用参数的位置。