我的〜/ .bashrc中有几个环境变量指向不同的目录。我正在运行一个程序,每次运行时都会创建一个新文件夹,并在目录名中加上一个时间戳。例如,baseline_2015_11_10_15_40_31-model-stride_1-type_1
。是否有可能链接到最后创建的目录的变量?
cd $CURRENT_DIR
答案 0 :(得分:1)
您的里程可能会有很大差异,具体取决于您需要完成的工作。但是,几乎所有情况下我都建议不要像下面描述的那样做一些奇怪和不可靠的事情,并修改你的架构以避免搜索目录。
如果您的程序在当前目录中创建了一个子目录,并且您始终知道该目录中没有其他任何内容发生,而您想要一个具有最新创建时间戳的子目录,那么您可以执行以下操作:
your_complex_program_that_creates_dir
TARGET_DIR=$(ls -t1 --group-directories-first | head -n1)
cd "$TARGET_DIR"
如果系统上发生了很多事情,那么您最终会监视程序对文件系统的作用,并在创建目录时做出反应。有两种方法可以做到这一点,使用strace
和inotify
,两者都比较复杂。这是使用strace做到这一点的方法:
strace -o some_temp_file.strace your_complex_program_that_creates_dir
TARGET_DIR=$(sed -ne '/^mkdir(/ { s/^mkdir("\(.*\)", .*).*$/\1/; p }' some_temp_file.strace
cd "$TARGET_DIR"
此代码段在your_complex_program_that_creates_dir
的控制下运行strace
,这实际上会将您程序生成的每个系统调用记录到文件中。然后,分析此文件以寻找类似
mkdir("target_dir", 0777) = 0
并将"target_dir"
的值提取到变量中。请注意:
strace
的程序多比正常情况慢。strace
等设施,但实施方式会有很多很多 inotify
的解决方案以相同的方式工作,但使用不同的机制 - 即它使用OS挂钩记录进程对文件系统执行的所有操作,然后对其做出反应(记住创建的目录)。 / p>
但是,我再说一遍,我强烈建议不要使用任何超出研究兴趣的解决方案。