我需要一个 .sh shell/bash 脚本,当我将目标目录移动到另一个目录(目标目录)时,它会自动 tar 一个与该目录同名的目录,
例如,我有目录 /home/user/MyFiles/ ,我将 /MyFiles/ dir 移动到 /home/user/new/ 内,我需要它在 /home/user/new/ 内创建 MyFiles.tar,其中包含每个文件/home/user/MyFiles 包含在 MyFiles.tar 中。
编辑:我忘记提到的是我需要 .tar 的目录有时在目录名称中包含字符 () 所以我需要脚本考虑到这一点,因为我知道如果你不使用它会给出错误tar 命令中的引号和 () 字符均存在,例如 tar -cvf "Example-(folder).tar" "Example-(folder)"
答案1
你可能想使用inotify(7)设施(假设一个本机的、非网络的、文件系统,如 ext4 等......)
你可能想要 incron。参见例如这。我想使用incron
forIN_CREATE
和IN_MOVED
events 通常就足够了。看因克朗德(8)和增量表(5)
但你应该解释你的动机和高层次目标(你的问题闻起来很像某些XY问题)。看来您需要一些版本控制系统(或者也许一些备份?)。我建议git
阅读更多关于索引节点。请记住,一个文件(实际上是文件系统中的索引节点)可以具有一些路径(或没有)并出现在一些目录(例如使用硬链接,通过链接(2)系统调用和ln(1)命令)。
我需要一个 .sh shell/bash 脚本,当我将目标目录移动到另一个目录(目标目录)时,它会自动 tar 一个与该目录同名的目录,
这个目标是不明确的(因为一个文件——实际上是一个匿名索引节点——可以有一些名称并出现在一些目录;文件也可以同时写入、创建、删除、截断和/或读取一些过程)。
也许您可能会定期运行一些其他脚本(例如定时任务(5),可能是某个 cron 作业正在运行一些制作或者忍者命令考虑了 inode 的修改时间....)
顺便说一句,这个网站不是“编写我的脚本”服务。您应该期待提示(如上),而不是其他人编写您自己的脚本。
我推荐阅读高级Linux编程更加了解你的Linux系统(从内部的角度)。
PS 文件名中的字符(
不是问题(在 shell 脚本中使用适当的双引号和大括号括住变量名)。但 Linux 上的文件和文件系统的行为与 Windows 等不同。理解 inode 的概念至关重要。