Quando eu criar um novo diretório, crie um arquivo de marcação com o mesmo nome nele

2

Eu quero criar muitos diretórios (manualmente, usando a GUI).

Eu, então, quero ter dentro deles um documento markdown com o mesmo nome do diretório, de modo que esse tipo de árvore:

624466
└ 624466.md
626665
└ 626665.md

Como posso automatizar a criação do arquivo .md ?

    
por Tim 05.07.2015 / 19:11

3 respostas

2

Eu usaria a API inotify fornecida pelo kernel para monitorar eventos do sistema de arquivos. Não há necessidade de um loop while indefinido, você pode usar uma ferramenta que usa a interface fornecida pelo kernel para verificar quaisquer alterações em qualquer arquivo.

Uma das ferramentas que usa inotify é inotifywait . De man inotifywait :

inotifywait efficiently waits for changes to files using Linux's inotify interface.

Ele não é instalado por padrão, é uma parte do pacote inotify-tools . Você pode instalá-lo por:

sudo apt-get install inotify-tools

O roteiro que estou tomando pode ter a seguinte forma:

#!/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)

Você pode enviá-lo para o plano de fundo:

./dir_event.sh &

Ou talvez use nohup ou disown se você quiser:

nohup ./dir_event.sh &
  • inotifywait --quiet --monitor --event CREATE,ISDIR /home/tim/test é o comando para monitorar os eventos do sistema de arquivos no diretório /home/tim/test , estamos interessados apenas nos eventos CREATE e ISDIR . Estamos salvando (como line ) e, em seguida, manipulando cada nova linha, indicando um evento relevante conforme eles acontecem. Por favor, verifique man inotifywait para ter mais ideia.

  • parent conterá o diretório que estamos monitorando /home/tim/test neste caso e child conterá o diretório / arquivo recém-criado. Ambos são alcançados usando a expansão do parâmetro bash .

  • new é a adição dos dois para obter o caminho absoluto para a entrada recém-criada. Como o evento CREATE resultará na criação de um arquivo também, precisamos garantir que new seja um diretório.

  • [[ -d $new ]] verifica se new é um diretório, se assim for, então criamos o arquivo necessário dentro dele.

por heemayl 05.07.2015 / 20:48
1

Tente isto:

#!/bin/bash

for d in */; do
    touch $d/$d.md
done
    
por Grammargeek 05.07.2015 / 19:15
0

Isso é o que acabei usando.

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

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

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

Graças a @Grammageek , ele post original realmente ajudou com o conceito de loop.

    
por Tim 05.07.2015 / 19:29