Desejo criar um diretório com um número no final, ex "dir1", e incrementar esse número se o diretório já existir até atingir um nome de diretório que não existe, e preciso fazer isso em uma única linha em uma linha de comando do Linux, algo como:
mkdir --increment dir$
Como eu faria isso?
Até agora eu tenho isso:
dir=output; n=0; mkdir -p $dir$n; if test -d $dir$n; then n=$((n+1)); echo $dir$n; fi
Mas apenas ecoa o próximo nome do diretório, preciso executar recursivamente o comando.
command-line
bash
mkdir
01AutoMonkey
fonte
fonte
Se você deseja criar incrementalmente diretórios listados na ordem correta, posso recomendar pastas nomeadas com base na data atual?
Ele criará diretórios com os nomes como
dir-2014-03-02
(YYYY-MM-DD
, para que apareçam em ordem alfabética).Se você criar mais de um diretório por dia, poderá adicionar a hora atual ao nome do arquivo. Veja
man date
como ajustar a formatação de saídadate
.fonte
encontre o "maior" nome do diretório primeiro, obtenha o número e aumente isso:
fonte
printf
aqui? Não será umecho
trabalho simples ?dir[0-9]*
vez dedir*
.Supondo que seus diretórios sempre iniciem em "dir1" e que não haja arquivos com o nome $ dir * (ou seja, todos são diretórios numerados sequencialmente), você pode se safar desse liner -
Isso conta o número de arquivos começando com $ dir, depois adiciona um a esse número e cria um novo arquivo.
fonte
Adendo às outras respostas: Se você precisar que os diretórios sejam classificados corretamente por nome, convém preencher o novo número de diretório (NUM) com zeros à esquerda em um comprimento fixo.
O seguinte pode ser condensado em uma linha ou incorporado em uma das outras soluções.
Isso pressupõe que NUM inicia pelo menos 1 dígito e não excede o comprimento fixo. Ajuste de acordo com seus requisitos.
fonte