파일에 파일 경로 추가

파일에 파일 경로 추가

파일 이름의 전체 디렉토리 경로를 파일에 넣고 싶습니다.

따라서 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둘 중 하나일 수 있습니다. 수정 중인 파일은 특정 유형의 저장소에 있어야 변경 사항이 예상대로 작동하는지 알 수 있고 그렇지 않은 경우 복원 명령을 사용하여 롤백할 수 있습니다.

관련 정보