检查shell中的复制目录

检查shell中的复制目录,shell,Shell,我已经创建了一个脚本,可以从目录收件箱中选择文件。无论文件是否来自另一个进程,我都必须在脚本中包含一个处理。如果文件正在通过另一个进程,那么我的脚本应该等待文件被复制 为此,我创建了一个标志 CHECK_COPY_PROCESS=$(ps -ef|grep -E 'cp|mv|scp'|grep inbox) 若标志CHECK\u COPY\u PROCESS包含一些值,则进程将进入等待状态。但问题是,假设一些文件来自该目录的子目录inbox 然后进程将生成如下cp文件\u name..上述逻

我已经创建了一个脚本,可以从目录
收件箱中选择文件。无论文件是否来自另一个进程,我都必须在脚本中包含一个处理。如果文件正在通过另一个进程,那么我的脚本应该等待文件被复制

为此,我创建了一个标志

CHECK_COPY_PROCESS=$(ps -ef|grep -E 'cp|mv|scp'|grep inbox)
若标志
CHECK\u COPY\u PROCESS
包含一些值,则进程将进入等待状态。但问题是,假设一些文件来自该目录的子目录
inbox

然后进程将生成如下
cp文件\u name..
上述逻辑不起作用。

您可以使用Basile的提示,将lsof与awk结合使用(仅在命令名的第一列上进行grepping)

例如:

lsof +D /path/to/inbox|awk '$1~/mv|cp|scp/'

这没有经过测试,因为我目前没有需要一段时间才能在我的机器上复制的大文件。

您也可以使用
lsof
,但我不确定是否有防弹解决方案;也可以
inotify
感谢Basile的回复,lof命令用于查看打开的文件列表。它与mv、cp、scp的关系如何?嗨,Elisiano。。此路径(/path/to/inbox)用于源路径,但我需要标识目标。请您建议目标路径。尝试将+D选项添加到传递给lsof lsof+D/path/to/inbox | awk'$1~/mv | cp | scp/“我将编辑原始答案以反映这一点