Como faço para criar arquivos usando as linhas em um arquivo .txt?

0

Por exemplo, eu tenho um arquivo chamado fileNames.txt. cat >fileNames retorna

abet

able

abacus

Como eu uso o fileNames para criar arquivos habilitados, abet e como o .txt? Eu tentei usar canos com gato e toque, mas eu sou um novato com essas coisas, então eu realmente não sei mais o que tentar.

    
por I'm a noob 02.10.2015 / 05:32

3 respostas

4

Existem várias maneiras de fazer isso, incluindo o seguinte (assumindo o GNU xargs ):

sed -e '/^[[:space:]]*$/d' -e 's/$/.txt/' fileNames.txt | xargs -rd '\n' touch --

Isso pressupõe que há apenas um nome de arquivo por linha no fileNames.txt. O script sed exclui linhas em branco (graças a @rubynorails) e adiciona '.txt' ao final de cada nome de arquivo antes de direcioná-las para xargs touch .

Usando a opção -d '\n' com xargs (uma extensão GNU, que diz a xargs para usar apenas nova linha ou '\ n' como delimitador em vez de espaço em branco, e desativa o processamento de citações), isso até lida com nomes de arquivos tem espaços e outros caracteres potencialmente problemáticos (exceto por \n ou nova linha em si). por exemplo. se uma linha continha 'habilitado', sem -d '\n' , dois arquivos ( abet e able.txt ) seriam criados. Com ele, apenas um arquivo abet able.txt será criado.

    
por 02.10.2015 / 05:39
3

Você pode usar um redirecionamento de entrada em um loop while com o comando read

while read line; do
    touch "${line}.txt"
done < fileNames.txt
    
por 02.10.2015 / 05:43
1

awk 'NF>0' fileNames.txt | while read line; do touch "${line}.txt"; done

O comando awk simplesmente se livra das linhas vazias.

Pelo que eu sei, essas linhas também são literais, então o que estiver na linha está sendo escrito como um nome de arquivo.

    
por 02.10.2015 / 05:40

Tags