adicionando o caminho de arquivo nos arquivos

0

Eu gostaria de colocar o caminho completo do diretório do nome do arquivo dentro do arquivo.

Portanto, se houver foo / bar / main.cpp, o caminho será adicionado na parte superior do arquivo main.cpp.

Alguém pode me ajudar com um comando bash?

Eu tentei todos os métodos find, exec e xargs, mas fazer echo ou cat me fornece o conteúdo do arquivo e não o nome do arquivo em si. Talvez as respostas deixem claro como os nomes dos arquivos são extraídos de find exec ou de qualquer outro método.

Saída esperada em um arquivo /foo/bar/main.cpp

///foo/bar
int main ( .... ) {
}
    
por infoclogged 22.06.2017 / 23:30

2 respostas

1

Se você usa o gnu find / sed, isso deve funcionar:

cd /
find subpath_with_files -name .hg -prune -o -type f -exec sed -i -e '1i\{}' {} +

Se você quiser adicioná-lo como comentário, você pode usar algo assim:

cd /
find subpath_with_files -name .hg -prune -o -type f -exec sed -i '1i\# Filename: {}' {} +

O truque é que {} pode ser usado mais de uma vez no parâmetro exec de find.

Estou removendo .hg supondo que isso esteja em um repositório mercurial. Isso pode ser .git ou outro. Os arquivos que você está modificando devem estar em um repositório de algum tipo, para que você possa saber que a mudança funcionou como desejado, e você pode reverter com um comando de reversão, se não.

    
por 22.06.2017 / 23:52
2

Você pode usar um script como este:

#!/usr/bin/env bash

for i; do
    if [ "${i:0:1}" = "/" ]; then
        # Absolute path
        sed -i "1i${i}" "${i}"
    else
        # Relative path
        sed -i "1i${PWD}/${i}" "${i}"
    fi
done

Ele toma qualquer número de arquivos como parâmetros posicionais, nos quais o caminho absoluto será gravado, ou seja, você pode chamá-lo assim:

./addPath foo/bar.cpp foo/bar/main.cpp /home/user/main.cpp

Aceita caminhos absolutos e relativos ', e você pode mixá-los, como você pode ver no exemplo.

Tenha cuidado, não há desfazer a funcionalidade! : -)

    
por 23.06.2017 / 02:29

Tags