我想解决一个之前可能已经讨论过或通过其他询问间接解决的问题。
我需要一种解决方案,用于将具有特定文件扩展名的文件从一个文件夹反复移动到另一个文件夹。然而,由于自动提取过程,脚本必须能够识别并跳过未完全提取的文件。
我已经设计了一个初步的脚本并用 crontab 对其进行了测试。现在,我试图通过合并以下功能来增强它:
- 指定对具有特定扩展名的文件的处理
- 实现跳过未完全提取的文件的机制
最佳卢卡
在第一次回复后,我制作了这个脚本。提取之前的文件是.rar(也分为.part),但是通过这个脚本我几乎解决了所有问题
#!/bin/bash
# Source folder
source_folder="-----"
# Destination folder
destination_folder="-----"
# File extension to be moved file_extension="-----"
# Iteration through the files with the specified extension
for file in "$source_folder"/*"$file_extension"; do
# Check if the file is open
if ! lsof "$file" >/dev/null 2>&1; then
# move the file
mv "$file" "$destination_folder"
fi
done
fuser
您可以使用或等实用程序lsof
来查找进程是否正在写入文件。仅当文件由同一主机上的进程提取并且该进程持续打开文件进行写入时,这才有用。如果提取过程失败或中止(例如由于系统重新启动)该怎么办?您想如何处理未主动提取的未完全提取的文件?
您能识别完全提取的文件的结尾吗?如果可以的话,我会以此作为你的标准。根据文件格式,我会使用
awk
,perl
或python
来检测文件结尾。(如果它是结构化格式,例如 JSON,您需要使用库来解析它;此类库很容易用于 Perl 和 Python。)一旦您有了一个脚本,例如
is-complete
,决定文件是否完整(通过返回退出代码 0 表示成功,返回任何其他数字表示失败),您可以在单个命令中移动文件: