폴더를 다른 드라이브로 이동하여 드라이브의 일부 공간을 확보하는 방법을 찾으려고 노력했습니다. 공간을 확보하기 위해 모두 이동하지 않고도 이동할 수 있는 항목으로 가득 찬 폴더가 있습니다.
Windows에서는 폴더 여러 개를 선택하고 속성을 가져오면 해당 폴더가 차지하는 공간이 얼마나 되는지 알려주고, 더 많거나 적게 선택한 다음 폴더를 이동합니다. bash 터미널에서는 이 작업을 수행할 수 없으며 어떻게 해야 할지 모르겠습니다. Google 검색을 하면 모든 파일을 특정 크기 이상으로 계속 이동하게 되는데, 이는 제가 원하는 일이 아닙니다.
답변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 *
*
최소 1GiB를 구성하려면 glob 확장자에서 최대한 많은 파일을 이동하세요 .
답변2
터미널에서도 거의 동일한 작업을 수행할 수 있습니다.
cd /path/to/full/drive/
채워진 드라이브의 루트 폴더로 이동하여 시작하십시오 .
그런 다음 사용 가능한 드라이브 내 각 폴더가 차지하는 용량을 살펴보세요 du -hd1
(GNU 구현 가정 du
).
설명: ( du
디스크 사용량) 현재 폴더의 파일 트리에서 반복적으로 실행하고 각 폴더에서 사용하는 용량을 인쇄합니다. 기본적으로 POSIXLY_CORRECT가 다소 읽을 수 없는 환경에 있는지 여부에 따라 512바이트 단위 또는 키비바이트 수로 인쇄하므로 이 -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 .