Comando touch criação de multiplos arquivos vazios. [RESOLVIDO]

1. Comando touch criação de multiplos arquivos vazios. [RESOLVIDO]

Neto Lopes
N370

(usa Debian)

Enviado em 25/01/2015 - 20:58h

Olá pessoal do viva o Linux sou iniciante no Linux e estou com uma dúvida sobre o comando "touch" eu sei que para criar um arquivo vazio basta o comando # touch nome-do-arquivo e para criar um arquivo vazio dentro de um diretório basta o comando # touch /caminho/nome-do-arquivo. Beleza o que estou tentando fazer é criar 1000 ou vários arquivos vazios de uma vez dentro de um diretório. Não estou conseguindo de forma alguma, como não tenho muito conhecimentos de programação fica difícil mas mesmo assim tentei fazer alguns scripts mais nenhum funcionou. vou enviar o código q fiz para que vcs possam me mostrar onde está o erro. Obrigado.



#!/bin/bash

while ( $# != 1001 ); do
if [ "$1" = "create-file" ]; then
touch /home/neto/Área de Trabalho/script
fi
done





  


2. MELHOR RESPOSTA

Phillipe Smith
smithux

(usa Arch Linux)

Enviado em 26/01/2015 - 10:18h

@removido,
Pode fazer simplesmente assim meu camarada:
touch /home/neto/Área\ de\ Trabalho/script/arquivo_{1..10}.txt 

Ou se preferir com script:
for i in `seq 1 10`
do
touch "/home/neto/Área de Trabalho/script/arquivo_${i}.txt"
done




3. Re: Comando touch criação de multiplos arquivos vazios. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/01/2015 - 00:40h

Neto_volk escreveu:

Olá pessoal do viva o Linux sou iniciante no Linux e estou com uma dúvida sobre o comando "touch" eu sei que para criar um arquivo vazio basta o comando # touch nome-do-arquivo e para criar um arquivo vazio dentro de um diretório basta o comando # touch /caminho/nome-do-arquivo. Beleza o que estou tentando fazer é criar 1000 ou vários arquivos vazios de uma vez dentro de um diretório. Não estou conseguindo de forma alguma, como não tenho muito conhecimentos de programação fica difícil mas mesmo assim tentei fazer alguns scripts mais nenhum funcionou. vou enviar o código q fiz para que vcs possam me mostrar onde está o erro. Obrigado.



#!/bin/bash

while ( $# != 1001 ); do
if [ "$1" = "create-file" ]; then
touch /home/neto/Área de Trabalho/script
fi
done




A função do comando 'touch' é a modificar os timestamps de uma arquivo já existente através da manipulação dos mesmos nos metadados do filesystem (quando o filesystem suporta estas operações). Quando o arquivo não existe, ele é criado caso as opções '-c' or '-h' não são passadas como argumento. Salvo algumas exceções, é uma má prática de programação utilizar o 'touch' para criar arquivos. Os redirecionamentos do shell são a forma correta de criar arquivos vazios e também de "zerar" arquivos:

> arquivo_vazio.txt 


Em alguns shells é necessário preceder o '>' com o comando nulo ':' para que ele não fique esperando por input, ficando:

:> arquivo_vazio.txt 


Quanto ao seu script, não consegui entender _como_ pretende criar os arquivos. Parece que passará por linha de comando, 1000, argumentos ... Seria até melhor guardar os argumentos em arquivo, se for este o caso, e corrigir erros semânticos também. Ainda no script, o nome de diretório que você tem é "pouco educado" por conter caracteres fora do intervalo [0-9A-Za-z_], isto obriga o programador a trabalhar bem mais para manipulá-los, há ainda outros aspectos negativos que é o de backup/restauração, de recuperação de arquivos apagados acidentalmente, muitas ferramentas tem dificuldade ou sequer trabalham com estes nomes de arquivo/diretório, e por último, problemas com encoding.

Meu chute é que você tem mil usuários com o diretório "Área de Trabalho" e pretende criar o arquivo "script" dentro destre diretório, segue simples solução para a hipótese apresentada:

find /home/ -type d -name 'Área de Trabalho' -exec bash -c '>"{}"/script' \; 




4. Re: Comando touch criação de multiplos arquivos vazios. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/01/2015 - 03:07h


Caro textmode, agradeço por responder ao meu tópico. Na verdade eu queria saber como criar uma quantidade grande de arquivos vazios com o comando touch e colocar esse arquivos em uma pasta. tentei fazer um script com laço de repetição mais não funcionou.
Ou seja, queria saber como executar o comando touch dentro de um laço e salvar os arquivos criados em uma pasta.


5. Re: Comando touch criação de multiplos arquivos vazios. [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/01/2015 - 10:32h

removido escreveu:


Caro textmode, agradeço por responder ao meu tópico. Na verdade eu queria saber como criar uma quantidade grande de arquivos vazios com o comando touch e colocar esse arquivos em uma pasta. tentei fazer um script com laço de repetição mais não funcionou.
Ou seja, queria saber como executar o comando touch dentro de um laço e salvar os arquivos criados em uma pasta.


Vou criar um cenário e uma solução e você avalia se lhe serve.

Supondo que pretenda criar uma grande quantidade de arquivos (1milhão) dentro de um diretório específico (/home/$USER/test_dir/) usando laços de repetição, eu poderia proceder da seguinte maneira:

qtd_arquivo=1000000000
dest_dir="/home/$HOME/test_dir/"

1. usando o 'for':

for (( i = 1; i <= $qtd_arquivo; i++ )); do
filename=$(printf vazio_%0${#qtd_arquivo}d $i)
touch "$dest_dir"/$filename
done


2. usando o 'while':

i=0
while (( i <= $qtd_arquivo )); do
filename=$(printf vazio_%0${#qtd_arquivo}d $i)
touch "$dest_dir"/$filename
let i+=1
done


3. usando o 'xargs':

cd $dest_dir;
seq -w $qtd_arquivo | xargs touch


Este último método não é bem um laço de repetição mas é muito mais rápido que os anteriores pois não "estressa" o comando 'touch' com apenas uma execução por vez, ele passa uma grande quantidade de arquivo por vez como argumentos para o comando 'touch'. Você conseguirá um melhora de performance considerável caso ao invés de usar o 'touch' utilize a forma recomendável de criação de arquivos vazios com o operador de redirecionamentos, neste caso, o xargs provavelmente perderá para os laços de repetição.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts