cp
我有一个 200k 大小的文件夹,我想用或任何其他可以执行此操作的 cli 命令将其分成 25k 个文件夹
答案1
我使用了这个命令:
files=(*);
num=$((${#files[@]}/8));
k=1
for ((i=0; i<${#files[@]}; i+=$num)); do
tar cvzf files$k.tgz -- "${files[@]:$i:$num}"
((k++))
done
摘自这篇文章:如何将多个大小相似的文件压缩成多个有大小限制的存档Jacob Vlijm 分享。它将所有文件压缩成几个.tgz
文件,这对我来说很好。您可以更改要分割的数字,这里 8 给了我 8 个压缩文件,其中包含 25k 个文件 + 1 个压缩文件,其中只有 2 个文件。这对我来说很管用。
答案2
您可以将“find”命令与 xargs 一起使用并传递多命令,首先从文件中读取一个值并将其设置为一个变量,我们将在新目录名中将其用作 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/;
”中删除“echo”命令,并将其放在“mkdir”后面以执行实际移动,然后重置 ID.txt
echo "1" > ../ID.txt
答案3
您可以对目录树进行 tar 处理,“分割”它,然后“cat”它重新组合在一起。
这可能会有帮助。没有验证命令,但我记得它有效,从 400 年前开始。
https://unix.stackexchange.com/questions/1588/break-a-large-file-into-smaller-pieces