将以'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
设置替换字符串,因此当它稍后存在时,它表示引用参数的位置。
我在指定目录中有很多文件。例如,我想将其中的 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
设置替换字符串,因此当它稍后存在时,它表示引用参数的位置。