フォルダを別のドライブに移動して、ドライブのいくつかのスペースを解放する方法を見つけようとしました。スペースを確保するために、すべて移動せずに移動できるアイテムでいっぱいのフォルダがあります。
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拡張子でできるだけ多くのファイルを移動してください。