我想创建简单的 bash 脚本,它将数据文件从源目录复制到 tmpfs ramdrive。我需要这个脚本具有时效性,因此它不是尝试进行复制并检查复制命令的结果代码的选项(我假设复制命令将开始复制并仅在没有空间时失败。我想避免启动复制当没有足够的空间时)。这是伪代码:
for filename in /data/*.dat; do
bname="$(basename $filename)"
ramname="/ramd/$bname"
if there is not enough space for $filename on ramdrive then
break
cp $filename $ramname
done
Run Code Online (Sandbox Code Playgroud)
您能否建议替换 if-break 语句。
您可以使用df - 报告可用磁盘空间和du - 估计文件空间使用情况POSIX的定义选项来完成此操作,前者带有用于报告系统上可用的可用空间的标志,并仅解析出块大小并对文件执行相同的操作。与国旗在.-Pawk-kdu
availMem=$(df -P "$ramname" | awk 'END{print $4}')
fileSize=$(du -k "$filename" | awk '{print $1}')
if (( fileSize > availMem )); then
break
fi
Run Code Online (Sandbox Code Playgroud)
(或)不带as 的POSIX-ly 整数比较bash
if [ "$fileSize" -gt "$availMem" ]; then
break
fi
Run Code Online (Sandbox Code Playgroud)
printf您还可以在 之前添加 来break进行调试,
printf "Requesting %s for copy when there is only %s left\n" "$fileSize" "$availMem"
Run Code Online (Sandbox Code Playgroud)