Gy0m Asked: 2017-07-18 00:31:37 +0800 CST2017-07-18 00:31:37 +0800 CST 2017-07-18 00:31:37 +0800 CST 如何使用命令行复制多个文件? 772 cp我有一个 200k 文件夹,我想使用或任何其他可以执行此操作的 cli 命令将其分成 25k 文件夹 command-line 3 个回答 Voted Best Answer Gy0m 2017-07-18T01:46:53+08:002017-07-18T01:46:53+08:00 我使用了这个命令: files=(*); num=$((${#files[@]}/8)); k=1 for ((i=0; i<${#files[@]}; i+=$num)); do tar cvzf files$k.tgz -- "${files[@]:$i:$num}" ((k++)) done 来自这篇文章:如何将许多类似大小的文件 tar.gz 压缩到多个档案中,并由 Jacob Vlijm 共享大小限制。它压缩了几个.tgz文件中的所有文件,这对我有好处。您可以更改除数,这里 8 给了我 8 个压缩文件,里面有 25k 个文件 + 1 个压缩文件,里面只有 2 个文件。那为我完成了工作。 αғsнιη 2017-07-19T04:26:38+08:002017-07-19T04:26:38+08:00 您可以使用带有 xargs 的“find”命令并传递 multi 命令以首先从文件中读取一个值并将其设置为一个变量,我们将在新目录名称中将其用作 ID,然后创建该目录,然后将文件移动到它并增加 ID 计数器并将其保存在文件中以保留它的最后一个值。 这是命令, find -maxdepth 1 -type f |xargs -n25000 bash -c 'readID=$(< ../ID.txt); echo mkdir directory_$readID; echo mv -v $@ -t directory_$readID/; echo $(expr ${readID} + 1)> ../ID.txt' ps注意请在执行上述命令前在ID.txt文件中写入起始ID echo "1" > ../ID.txt 此 ID.txt 是当前工作目录的上一级。 一旦你检查了命令并看到发生了什么,然后从这个命令' echo mv -v $@ -t directory_$readID/;'和'mkdir'后面删除'echo'命令以执行实际移动,并重置ID.txt echo "1" > ../ID.txt Nobody 2017-07-20T06:56:53+08:002017-07-20T06:56:53+08:00 您可以对目录树进行 tar,“拆分”它,然后将其“合并”在一起。 这可能会有所帮助。没有验证命令,但我记得它可以工作,从 400 年前开始。 https://unix.stackexchange.com/questions/1588/break-a-large-file-into-smaller-pieces
我使用了这个命令:
来自这篇文章:如何将许多类似大小的文件 tar.gz 压缩到多个档案中,并由 Jacob Vlijm 共享大小限制。它压缩了几个
.tgz
文件中的所有文件,这对我有好处。您可以更改除数,这里 8 给了我 8 个压缩文件,里面有 25k 个文件 + 1 个压缩文件,里面只有 2 个文件。那为我完成了工作。您可以使用带有 xargs 的“find”命令并传递 multi 命令以首先从文件中读取一个值并将其设置为一个变量,我们将在新目录名称中将其用作 ID,然后创建该目录,然后将文件移动到它并增加 ID 计数器并将其保存在文件中以保留它的最后一个值。
这是命令,
ps注意请在执行上述命令前在ID.txt文件中写入起始ID
此 ID.txt 是当前工作目录的上一级。
一旦你检查了命令并看到发生了什么,然后从这个命令'
echo mv -v $@ -t directory_$readID/;
'和'mkdir'后面删除'echo'命令以执行实际移动,并重置ID.txt您可以对目录树进行 tar,“拆分”它,然后将其“合并”在一起。
这可能会有所帮助。没有验证命令,但我记得它可以工作,从 400 年前开始。
https://unix.stackexchange.com/questions/1588/break-a-large-file-into-smaller-pieces