Когда я создаю новый каталог, создайте файл уценки с тем же именем в нем

Я хочу создать много каталогов (вручную, используя графический интерфейс).

Затем я хочу иметь внутри них документ уценки с тем же именем, что и каталог, так что это дерево:

624466
└ 624466.md
626665
└ 626665.md

Как я могу автоматизировать .md создание файла?

3 ответа

Я хотел бы использовать 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 каталог, если так, то мы создали необходимый файл внутри него.

Попробуй это:

#!/bin/bash

for d in */; do
    touch $d/$d.md
done

Это то, что я в конечном итоге использовал.

while :
do
    for dir in *; do
        if [ "$dir" != "Untitled Folder" ];
        then

            if [ "$(ls "$dir")" = '' ];
            then

                touch "$dir/$dir.md"
            fi
        fi
    done
done

Благодаря Grammargeek его оригинальный пост действительно помог с концепцией цикла.

Другие вопросы по тегам