我需要编写一个 Linux 脚本,它在其中执行以下操作:从名为 ftpuser 的目录中查找所有 .ear 和 .war 文件,甚至是将出现在那里的新文件,然后执行一个生成一些报告的命令。当命令完成时,这些文件需要移动到另一个目录。
下面我认为我已经找到了命令的启动方式。我的问题是有谁知道如何在目录中找到新条目然后执行命令以便我可以得到报告?
find /directory -type f -name "*.ear" -or -type f -name "*.war"
您似乎希望脚本无限期地运行。循环遍历您的文件find
以执行所需的操作:
while : ; do
for file in $(find /directory -type f -name "*.[ew]ar"); do
some_command "${file}" # Execute some command for the file
mv "${file}" /target/directory/ # Move the file to some directory
done
sleep 60s # Maybe sleep for a while before searching again!
done
这也可能有帮助:监控目录的变化
如果它不是时间紧迫的,但您不愿意在每次重新启动后手动启动脚本(如 devnull 建议的脚本),我建议使用 cron-job。
您可以使用
crontab -e
并附加这样的一行:
* * * * * /usr/bin/find /some/path/ftpuser/ -type f -name "*.[ew]ar" -exec sh -c '/path/to/your_command $1 && mv $1 /target_dir/' _ {} \;
这会每分钟运行一次搜索。您可以更改时间间隔,请参阅https://en.wikipedia.org/wiki/Cron了解概览。&& 导致仅当 your_command 成功时才执行移动。您可以通过手动运行它来检查,然后
echo $?
0 表示正确或成功。有关详细信息,请参阅http://tldp.org/LDP/abs/html/exit-status.html