我正在尝试在目录之间复制特定文件。因此,我列出了ls
的所有文件,添加了一个包含cat -n
的行号,然后选择了我要用head -100
复制的前100个文件。之后我使用xargs
命令,但它不起作用。这是代码:
ls * | cat -n | head -100 | xargs -0 cp -t ~/foo/bar
该命令在屏幕上重现文件列表并返回警告File name too long
。
我也尝试使用-exec cp -t
,并返回消息-bash: -exec: command not found
。
编辑: 我的文件名包含多年(例如1989a,1989b,1991a,1992c),因此我想选择在某一年之前发布的所有文件(例如1993年)。
答案 0 :(得分:3)
这将导致100次cp
的调用,但您可以使用循环:
count=0; for i in *; do cp "$i" ~/foo/bar; ((++count == 100)) && break; done
另一种方法是使用数组:
files=( * )
cp "${files[@]:0:100}" ~/foo/bar
glob *
扩展为使用当前目录中的文件列表填充数组。然后复制数组的前100个元素。
答案 1 :(得分:2)
如果您没有太多文件(以便不超过参数的最大数量和允许参数的最大缓冲区长度),您可以使用以下内容:
shopt -s nullglob
cp -t ~/foo/bar {1970..1993}*
复制名称以1970年至1993年(含)之间的数字开头的所有文件。请注意,这也将复制名为197444
的文件(如果有的话),并且还会尝试复制具有匹配名称的目录(除非您发出警告,否则它会忽略它也传递-r
标志。)
请参阅:
答案 2 :(得分:1)
使用GNU Parallel它将如下所示:
ls | head -100 | parallel -X cp {} ~/foo/bar