在文件中添加文件路径

在文件中添加文件路径

我想将文件名的完整目录路径放入文件中。

因此,如果存在 foo/bar/main.cpp,则该路径将添加到文件 main.cpp 的顶部。

任何人都可以帮我使用 bash 命令吗?

我尝试了所有 find 、 exec 和 xargs 方法,但是执行 echo 或 cat 为我提供了文件的内容,而不是文件名本身。也许答案会清楚地说明如何从 find exec 或任何其他方法中提取文件名。

文件 /foo/bar/main.cpp 中的预期输出

///foo/bar
int main ( .... ) {
}

答案1

您可以使用这样的脚本:

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

如果您使用 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: {}' {} +

技巧是{}可以在 find 的 exec 参数中多次使用。

我正在修剪.hg,假设这是在水银存储库中。这可以是.git或其他。您正在修改的文件应该位于某种类型的存储库中,以便您可以知道更改是否按预期工作,如果没有,您可以使用恢复命令回滚。

相关内容