Когда я создаю новый каталог, создайте файл уценки с тем же именем в нем
Я хочу создать много каталогов (вручную, используя графический интерфейс).
Затем я хочу иметь внутри них документ уценки с тем же именем, что и каталог, так что это дерево:
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 его оригинальный пост действительно помог с концепцией цикла.