Когда я создаю новый каталог, создайте файл уценки с тем же именем в нем
Я хочу создать много каталогов (вручную, используя графический интерфейс).
Затем я хочу иметь внутри них документ уценки с тем же именем, что и каталог, так что это дерево:
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каталог, если так, то мы создали необходимый файл внутри него.
Это то, что я в конечном итоге использовал.
while :
do
for dir in *; do
if [ "$dir" != "Untitled Folder" ];
then
if [ "$(ls "$dir")" = '' ];
then
touch "$dir/$dir.md"
fi
fi
done
done
Благодаря Grammargeek его оригинальный пост действительно помог с концепцией цикла.