Eu vi um aplicativo para Mac chamado Structurer (aqui um vídeohttp://www.youtube.com/watch?v=kXRjneFTs6Q) que deu uma estrutura de arquivos e pastas como esta:
/folder1
/folder2
/file1
/folder2.1
/file2.1
criará esses arquivos e pastas em um local existente.
Existe algo assim para o Ubuntu, ou como posso construir um script de shell para obter algo assim?
Se for possível seria legal também poder criar arquivos usando templates.
Responder1
A parte complicada é que você tem arquivos e pastas mostrados da mesma maneira e não há uma maneira simples de diferenciá-los. Para o arquivo 2.1 não há como saber se ( /folder2/folder2.1/file2.1
) é na verdade uma pasta ou um arquivo dentro da pasta2.1.
Sim, sua descrição diz a palavra, *file*
então sabemos que você quer dizer arquivo, mas para um programa, como isso poderia dizer? Um programa pode diferenciar arquivos de caminhos porque um é seguido no mesmo nível de indentação por outra entrada. MAS, isso leva a um conjunto de regras complicadas e confusas.
Eu sugiro que você use uma palavra-chave ou apenas nomes completos e qualificados. O mais fácil é:
/pasta1/
/pasta2/
/pasta2/arquivo1
/pasta2/pasta2.1/
/pasta2/pasta2.1/arquivo2.1
A barra final significa "Esta é uma pasta e não um arquivo". Então você pode ter um script fácil como este para criar sua estrutura de diretórios. Alguns avisos sobre este script.
- os diretórios de nível superior devem ser criados primeiro.
- Eu acrescento um "." ao caminho para que todos os diretórios criados sejam relativos àquele em que o script é executado.
- Não cometo nenhum erro ao verificar o conteúdo do arquivo dir/path.
#!/bin/sh -v # # builds a directory and file structure. # directories must exists before referenced or file in the directory declared. # # sample input looks like (without the leading #): # /folder1/ # /folder2/ # /folder2/file1 # /folder2/folder2.1/ # /folder2/folder2.1/file2.1 # # make sure we have our one and only input parameter. if [ $# != 1 ]; then echo "Usage: `basename $0` input_file_name" echo "input_file_name contains absolute dir paths with a trailing slash," echo "or absolute file path/name with no trailing slash." exit 1 fi # get the file name from the command line FILE=$1 # make sure the input parameter specifies a file. if [ ! -e ${FILE} ]; then echo "Sorry, the file ${FILE} does not exist." exit 1 fi for LINE in $(cat $FILE) do LAST=$(echo ${LINE} | awk -F/ '{print $(NF)}') # if file ends with a slash, this value is blank, if it is no slash, this is the file name. if [ "${LAST}XXX" = "XXX" ]; then # is empty, so it is directory, future feature to check exist already mkdir ".${LINE}" else # is not empty, so it is a file touch ".${LINE}" fi done exit 0
Isso criará os diretórios e arquivos conforme mostrado no arquivo de entrada. Se o script for chamado create.sh
e você o tiver chmod 755 create.sh
, o comando ./create.sh data
gerará seus diretórios e arquivos conforme descrito no arquivo de dados.