当linux bash脚本中有足够的空间时复制文件

igo*_*sol 4 linux bash

我想创建简单的 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 语句。

Ini*_*ian 8

您可以使用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)