Добавление FilePath в файлах

[[] это не функция POSIX, а ksh88.

Если вы хотите узнать, что происходит, вам нужно прочитать документацию по ksh.

Поскольку вы, похоже, заинтересованы в понимании функции [[], вам нужно знать, что [[ - это не встроенная команда, как [[, а часть синтаксиса оболочки, поэтому ее рабочая база полностью отличается от команды test.

По этой причине, например, [[ $var == *test? ]] не нужно заключать шаблон справа в кавычки.

0
23.06.2017, 02:07
2 ответа

Можно использовать такой скрипт:

#!/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

В качестве позиционных параметров принимает любое количество файлов, в которых будет прописан абсолютный путь, т.е. можно вызывать так:

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

Он принимает абсолютные и относительные пути, и вы можете смешивать их, как вы можете видеть в примере.

Будьте осторожны, функция отмены недоступна! :-)

2
28.01.2020, 02:25

Если вы используете gnu find/sed, это должно работать:

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

Если вы хотите добавить это как комментарий, вы можете использовать что-то вроде этого:

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

Хитрость в том, что {}можно использовать более одного раза в параметре exec команды find.

Я обрезаю .hg, предполагая, что это находится в ртутном репозитории. Это может быть .gitили другое. Файлы, которые вы изменяете, должны находиться в каком-либо репозитории, чтобы вы могли знать, что изменение сработало должным образом, и вы можете откатиться с помощью команды возврата, если это не так.

1
28.01.2020, 02:25

Теги

Похожие вопросы