Modifique alguns arquivos para adicionar o nome do arquivo

2

Eu tenho um monte de texto (centenas de txt) dentro de um diretório. Cada um deles tem um nome de arquivo exclusivo. Eu quero inserir o nome do arquivo de cada arquivo na primeira linha dos respectivos arquivos. Como posso fazer isso usando o script bash?

    
por karwar 26.09.2014 / 03:54

3 respostas

3

A abordagem padrão é usar arquivos temporários, mas você pode alterar os arquivos se você colocar cat em $() parênteses:

for file in *.txt; do echo "$file"$'\n'"$(cat -- "$file")" > "$file"; done
    
por 26.09.2014 / 04:24
1

Você pode usar o editor de texto padrão:

for f in *; do printf '%s\n' 1i "$f" . w q | ed "$f"; done
    
por 26.09.2014 / 09:06
0
for file in *; do
 (echo "$file"; cat -- "$file") > "$file.new"
 mv -- "$file.new" "$file"
done

Isso faz um loop sobre todos os arquivos ecoa cada nome de arquivo e acrescenta o conteúdo do arquivo então tudo colocando em um novo arquivo com o sufixo adicional de .new .

Você cria um novo arquivo para cada existente, então você deve renomear os arquivos depois.

Você pode colocar os resultados em um novo diretório e depois remover o antigo:

mkdir new
for file in *; do
 (echo "$file"; cat "$file") > "new/$file"
done

Você também pode usar sed com a opção -i para fazer a edição no local dos arquivos. Perl também permite isso. Tudo depende em quais outras ferramentas você tem disponível. :)

    
por 26.09.2014 / 04:13