Shell 有条件删除小于 xMB 文件的脚本
Shell script to delete files smaller than xMB with condition
如果文件夹中有多个小于 10MB 的文件,我正在尝试编写一个脚本来删除最小的文件,但我没有成功。
在我的尝试中
find . -type f -size -10M -exec rm {} +
删除所有小于 10MB 的文件,如果文件夹中递归地有 2 个小于 10MB 的文件,我只需要删除最小的文件。
谁能帮帮我?
一个选项是遍历 find
的输出,然后跟踪文件的数量并跟踪最小的文件,所以最后你可以删除它:
#!/bin/bash
path=/path/to/dir # replace here with your path
while read -d '' -r dir;do
files_count=0
unset min
unset smallest_file
while read -d '' -r file;do
let files_count++
min_size="$(du -b "${file}"|cut -f1)"
min=${min:-"$min_size"}
smallest_file=${smallest_file:-"$file"}
if (( min_size < min ));then
min=$min_size
smallest_file=$file
fi
done < <(find "${dir}" -type f -size -10M -maxdepth 1 -print0)
if (( files_count >= 2 ));then
echo "$smallest_file"
#rm -v "$smallest_file"
fi
done < <(find "${path}" -type d -print0)
如果文件夹中有多个小于 10MB 的文件,我正在尝试编写一个脚本来删除最小的文件,但我没有成功。
在我的尝试中
find . -type f -size -10M -exec rm {} +
删除所有小于 10MB 的文件,如果文件夹中递归地有 2 个小于 10MB 的文件,我只需要删除最小的文件。
谁能帮帮我?
一个选项是遍历 find
的输出,然后跟踪文件的数量并跟踪最小的文件,所以最后你可以删除它:
#!/bin/bash
path=/path/to/dir # replace here with your path
while read -d '' -r dir;do
files_count=0
unset min
unset smallest_file
while read -d '' -r file;do
let files_count++
min_size="$(du -b "${file}"|cut -f1)"
min=${min:-"$min_size"}
smallest_file=${smallest_file:-"$file"}
if (( min_size < min ));then
min=$min_size
smallest_file=$file
fi
done < <(find "${dir}" -type f -size -10M -maxdepth 1 -print0)
if (( files_count >= 2 ));then
echo "$smallest_file"
#rm -v "$smallest_file"
fi
done < <(find "${path}" -type d -print0)