【问题标题】:Need to move every 5000 files to new folder using batch script需要使用批处理脚本将每 5000 个文件移动到新文件夹
【发布时间】:2020-01-16 21:07:23
【问题描述】:

我有一个包含 >10000000 个文件的文件夹,需要将它们移动到每个文件夹 5000 个。使用批处理脚本如何将它们移动到单个文件夹?

【问题讨论】:

  • 文件夹应该如何命名?你试过什么?

标签: macos shell terminal


【解决方案1】:
i=0
while true; do
    ls | head -5000 > ../files
    if [ ! -s ../files ]; then
       break
    fi
    (( i++ )) # Boomer here but feeling younger every day thanks to KamilCuk.
    mkdir ../dir$i # I know. No error checking here.
    while read filename; do
       mv "$filename" ../dir$i # No error checking here either.
    done < ../files
done

如果mkdirmv 反复失败,此脚本将成为无限循环。您还必须小心存储临时文件files 的位置以及创建目标目录的位置;否则下一个ls 必须避免识别上一个循环迭代的输出目录。

如果文件名包含换行符,脚本也会出现问题(不太可能但很容易完成)。如果你有这个用例,那么,这个脚本将再次进入无限循环,因为mv 命令将失败,因为read 将无法正确读取该文件名。

【讨论】:

  • Do not parse lsBoomer here :) bash hackers wiki Obsolete and deprecated syntaxwhile [ 1 ],只是while :while true[ 1 ] 很奇怪,它检查字符串 1 是否有非零长度。
  • @KamilCuk 如果mv 可以一次读取一行文件列表,那将非常方便。那么字符转义问题可能就没有实际意义了。
猜你喜欢
  • 1970-01-01
  • 2021-10-19
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多