批量复制到多个目录

alt*_*ker 5 shell xargs cp

我在一个目录中有大约 9000 个文件,我想按文件名顺序将它们转换为 100 个目录中的 90 个文件,忽略任何剩余部分。在将多个文件从文件名 X 复制到文件名 Y 中?, Caleb评论中写道:

如果对象只是批处理它们,则有更简单的方法!ls | xargs -iX -n20 cp X target_folder/将在文件上以 20 个批次运行 cp,直到它们全部完成。

所以基于使用 xargs,我怎么能切换 target_folder 来创建一个新文件夹并循环命令 100 次?

Gil*_*il' 1

该命令看起来与您想要执行的操作不太接近。xargs可以提供帮助,但使用起来很麻烦,除非您知道文件名不包含任何空格或引号字符。这是一个 shell 循环,它将文件分派到新创建的子目录中,每个目录 90 个。

set -- *
# Set args to "$1" "$2" ... "$90"
i=1 args=
while [ $i -le 90 ]; do
  slice="$slice \"\${$i}\""
  i=$((i+1))
done
# Move files 90 at a time
i=0
while [ $# -ge 90 ]; do
  mkdir part$i
  eval "mv $slice part$i"
  shift 90
done
# 0 to 89 files remain in the current directory
Run Code Online (Sandbox Code Playgroud)