我在指定目录中有很多文件。例如,我想将其中的 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]*
文件加上 <file_argument>
通过 xargs
提供到目标位置。然后你执行这个命令 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
设置替换字符串,以便稍后存在时,它表示引用参数的位置。
关于linux - 在 Linux 中将以 'a' 'c' 或 'e' 开头的前 N 个文件从一个文件夹复制到另一个文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47491686/