如何找到前X gb的数据?

如何找到前X gb的数据?

我一直在尝试找到一种方法,通过将文件夹移动到另一个驱动器来释放驱动器上的一些空间。我有一个文件夹,里面装满了我可以移动的东西,不需要全部移动,以释放一些空间。

在 Windows 中,我只需选择一堆文件夹,获取属性,它会告诉我它占用了多少空间,我会选择更多或更少,然后移动它们。我无法从 bash 终端执行此操作,而且我不知道该怎么做。谷歌搜索不断引导我移动超过一定大小的所有文件,这不是我想要做的。

答案1

在 GNU 系统上,您可以将其编写为:

#! /bin/bash -
usage() {
  printf >&2 '%s\n' "Usage: $0 <destination> <size> [<file1> [<file2>...]]"
  exit 1
}
(($# >= 2)) || usage
dest=$1
size=$(numfmt --from=iec <<< "$2") || usage
shift 2
(($# == 0)) && exit
selected=()
sum=0

shopt -s lastpipe
LC_ALL=C du -s --null --block-size=1 -- "$@" |
  while
    ((sum < size)) &&
      IFS= read -rd '' rec &&
      s=${rec%%$'\t'*} &&
      file=${rec#*$'\t'}
  do
      selected+=("$file")
      ((sum += s))
  done

((${#selected[@]} == 0)) ||
  exec mv -t "$dest" -- "${selected[@]}"

例如用作:

that-script /dest/folder 1G *

从该 glob 的扩展中移动尽可能多的文件*以构成至少 1GiB。

答案2

您几乎可以在终端中执行完全相同的操作:

首先执行cd /path/to/full/drive/进入已填满的驱动器的根文件夹。

然后,要查看您可以使用的驱动器内每个文件夹占用的容量du -hd1(假设是 GNU 实现du)。

说明:(du磁盘使用情况)从当前文件夹在文件树上递归运行,打印每个文件夹使用的容量。默认情况下,它打印为 512 字节单位或 kibibytes 的数量(取决于 POSIXLY_CORRECT 是否处于有点不可读的环境中),因此该-h选项告诉它打印大小为“人类可读”(转换为 MB/GB)。该d参数du在达到指定的“深度”(在本例中为 1)后强制停止其下降到文件树中。

找到要从中移动内容的特定目录后,您可以使用ls -lh查看该目录内的文件大小来识别要移动的特定文件。这里h再次将打印尺寸设置为“人类可读”,并-l获取包含文件大小的“长”格式。

奖励点:您可以du通过管道sort(这里再次假设 GNU sort)来获取按大小排序的输出(假设文件名不包含换行符),以使事情变得更容易,如下所示:

du -hd1 | sort -h

并且ls在提供选项时也可以按大小对输出进行排序-S

ls -lhrS

最后,要移动文件/文件夹,您可以使用该mv /path/to/source /path/to/target命令。

我假设您知道相关驱动器的根文件夹是什么。

答案3

使用du -hd1

-h 以人类可读的格式打印大小

-d <1> 是目录的深度。

例子:

$ du -hd1 
11G     ./dir1
9.5G.   ./dir2
11G     ./dir3
6.3G    ./dir4
9.1G    ./dir5
6.4G    ./dir6
4.8G    ./dir7 
58G     .

相关内容