如何通过 bash 脚本知道文件操作是否已完成?

如何通过 bash 脚本知道文件操作是否已完成?

我可能执行了一些涉及大型或多个文件的复制/移动操作。在 bash 中,我希望得到一些提示,提示该操作已结束。我能做什么?

在此处输入图片描述

起初我以为,等待 pid 应该可以解决问题。因此,在一次这样的操作中,我运行top并发现它mount.ntfs占用了大部分 CPU。但是,在执行此文件操作后(对话框自动消失后),该进程仍在运行。

因此我排除了这一点。有什么想法可以让我了解我的操作系统何时关闭了该对话框吗?

答案1

  • 第一步是检查复制操作是否已完成。我想你已经检查过这一步了。

  • 第二步是检查缓冲区是否被刷新(RAM 中的缓冲数据最终被写入目标设备,以便文件内容确实存储在驱动器中分区的文件中)。

    您可以运行sync来刷新缓冲区。当sync完成并bash返回提示时,第二步也已完成。


  • 有一个工具可以监视读/写活动,iotop使用以下命令安装它

    sudo apt install iotop
    

    并使用以下命令行运行它

    sudo iotop -o
    

答案2

如果没有看到实际的脚本,就很难知道您对文件操作使用了什么样的命令。


一个非常简单的选择是,在复制/移动操作完成后简单地创建一个临时文件,如下所示

#copy action

cp $1 /home/user/backup/
touch /tmp/finished.tmp

然后检查文件是否存在或是否有最近的更改

ls -lha /tmp/finished

或进行自动定期检查

watch ls -lha /tmp/finished

根据您的需要,您可以命名每个临时文件,就像它代表的复制/移动作业一样,也许都在同一个目录中

# set the variable JOBNAME via input or via sourcename
# JOBNAME=$SOURCE
# JOBNAME=$2
mkdir /tmp/copyjobs

# your copy job here

touch /tmp/copyjobs/finished.$JOBNAME.tmp

# your next copy job here 

touch /tmp/copyjobs/finished.$JOBNAME.tmp

然后查看整个目录

watch ls -lha /tmp/copyjobs/

根据您的技能,您还可以使用循环等等。


类似的工具同步命令行有一个内置的进度条,这样你就可以看到你的工作进展到了什么程度- 进步或者-P

但 rsync 可能不是适合这个工作的工具。

答案3

“gcp”是你的朋友:)

这就是你需要的吗?

$ gcp -rf test.file tmp/
Copying 404.32 MiB 100% |############################| 471.12 MB/s Time: 0:00:00

答案4

在以下 git 存储库中检查 progress_bar 的源代码:

https://github.com/Kiran-Bose/supreme

还可以尝试自定义 bash 脚本包最高

从上述存储库下载 deb 文件并将其安装在基于 debian 的系统上。

功能概述

(1)打开应用程序----Firefox----计算器----设置

(2)管理文件 ----搜索 ----导航 ----快速访问

            |----Select File(s)
            |----Inverse Selection
            |----Make directory
            |----Make file
                                          |----Open
                                          |----Copy
                                          |----Move
                                          |----Delete
                                          |----Rename
                                          |----Send to Device
                                          |----Properties

(3)管理手机 ----从手机移动/复制 ----移动/复制到手机 ----同步文件夹

(4)管理USB ----从USB 移动/复制 ----移动/复制到USB

相关内容