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