我想创建很多目录(手动,使用 GUI)。
然后我希望在其中有一个与目录同名的 markdown 文档,因此这种树:
624466
└ 624466.md
626665
└ 626665.md
我如何才能自动.md
创建文件?
答案1
我会使用inotify
内核提供的 API 来监视文件系统事件。无需无限while
循环,您可以使用使用内核提供的接口的工具来检查任何文件上的任何更改。
使用的工具之一inotify
是inotifywait
。来自man inotifywait
:
inotifywait efficiently waits for changes to files using Linux's inotify interface.
它不是默认安装的,它是软件包的一部分inotify-tools
。您可以通过以下方式安装它:
sudo apt-get install inotify-tools
我正在讨论的脚本可以采用以下形式:
#!/bin/bash
while IFS= read -r line; do
parent="${line%% *}"
child="${line##* }"
new="${parent}${child}"
[[ -d $new ]] && touch "$new"/"$child".md
done < <(inotifywait --quiet --monitor --event CREATE,ISDIR /home/tim/test)
您可以将其发送到后台:
./dir_event.sh &
或者如果您愿意的话nohup
可以使用:disown
nohup ./dir_event.sh &
inotifywait --quiet --monitor --event CREATE,ISDIR /home/tim/test
是用于监视目录 上的文件系统事件的命令,我们只对和事件/home/tim/test
感兴趣。我们保存(为),然后操纵每个新行,指示发生的相关事件。请查看以了解更多信息。CREATE
ISDIR
line
man inotifywait
parent
/home/tim/test
将包含我们在本例中监视的目录,并将child
包含新创建的目录/文件。两者都是通过使用bash
参数扩展来实现的。new
将两者相加即可获得新创建条目的绝对路径。由于CREATE
事件也会导致创建文件,因此我们需要确保它new
是一个目录。[[ -d $new ]]
检查是否new
是一个目录,如果是,那么我们就在其中创建了所需的文件。
答案2
尝试这个:
#!/bin/bash
for d in */; do
touch $d/$d.md
done
答案3
这就是我最终使用的方法。
while :
do
for dir in *; do
if [ "$dir" != "Untitled Folder" ];
then
if [ "$(ls "$dir")" = '' ];
then
touch "$dir/$dir.md"
fi
fi
done
done
谢谢@Grammageek, 他的原始帖子确实对 for 循环概念有帮助..