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

标签 linux terminal copy conditional-statements cp

我在指定目录中有很多文件。例如,我想将其中的 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/

相关文章:

macos - 终端中的 OS X cp 命令 - 没有这样的文件或目录

javascript - Imacros 根据 </br> 标记之间的每个新行进行复制和粘贴

c++ - 复制构造函数被触发但是如何触发?

python - 如何在循环中使用 os.pipe() (复制多个管道)?

c - 如何存储字符 '\b'并使其被c程序文件识别

linux - Ansible 无法创建 dir/$HOME/.ansible/cp

windows - 捕获 Windows 终端正在运行的进程关闭

powershell - 复制文件名中带有方括号 [] 的文件并使用 * 通配符

c - Exec(cd 和 ls)和 Fork 调用 C

python - 在 python2.7 和 python 3.5 上获得不同的 O/P