当我创建一个新目录时,在其中创建一个同名的 markdown 文件

当我创建一个新目录时,在其中创建一个同名的 markdown 文件

我想创建很多目录(手动,使用 GUI)。

然后我希望在其中有一个与目录同名的 markdown 文档,因此这种树:

624466
└ 624466.md
626665
└ 626665.md

我如何才能自动.md创建文件?

答案1

我会使用inotify内核提供的 API 来监视文件系统事件。无需无限while循环,您可以使用使用内核提供的接口的工具来检查任何文件上的任何更改。

使用的工具之一inotifyinotifywait。来自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感兴趣。我们保存(为),然后操纵每个新行,指示发生的相关事件。请查看以了解更多信息。CREATEISDIRlineman 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 循环概念有帮助..

相关内容