디렉토리의 모든 파일 앞에 줄을 추가하는 방법은 무엇입니까?

디렉토리의 모든 파일 앞에 줄을 추가하는 방법은 무엇입니까?

backup파일 확장자라는 디렉토리 가 있습니다 *.sql. 내가 원하는 것은 디렉토리의 모든 SQL 파일 앞에 한 줄을 추가하는 것입니다 backup.

그렇게 했지만 echo 'use my_db;' >> backup/*.sql성공하지 못했습니다.

다음을 시도했지만 다음에 무엇을 해야할지 모르겠습니다.

ls backup/*.sql | xargs echo "use my_db;"

해당 줄을 앞에 추가하는 솔루션이 있습니까?

답변1

GNU 사용 sed:

for sql in backup/*.sql; do
    sed -i '1i\use my_db;' "$sql"
done

표준 sed:

for sql in backup/*.sql; do
    sed '1i\
use my_db;
' "$sql" >"$sql.bak" && mv "$sql.bak" "$sql"
done

.sql그러면 그 안에 있는 모든 파일을 바로 편집할 수 있습니다 backup. 편집 명령은 각 파일의 첫 번째 줄 앞에 한 줄을 삽입합니다.

이는 패턴이 backup/*.sql편집하려는 파일과만 일치한다고 가정합니다.


사용 echocat:

for sql in backup/*.sql; do
    { echo 'use my_db;'; cat "$sql"; } >"$sql.tmp" && mv "$sql.tmp" "$sql"
done

이 루프에서는 먼저 파일에 추가할 줄을 출력한 다음 파일의 내용을 출력합니다. 이는 임시 파일로 이동한 다음 이름이 변경됩니다.


주문하다

echo 'use my_db;' >> backup/*.sql

다음과 같이 확장됩니다.

echo 'use my_db;' >> backup/file1.sql backup/file2.sql backup/file3.sql

이는 다음과 같습니다.

echo 'use my_db;' backup/file2.sql backup/file3.sql >> backup/file1.sql

그러면 주어진 문자열이 backup/file1.sql.

두 번째 명령은 파일을 수정하지 않습니다.

답변2

해결책

sed -i '1 i\use my_db' backup/*.sql

설명하다

sed -i파일의 변경 사항을 유지하고 쓰지 마십시오 stdout.

1- sed첫 번째 줄에 있을 때.

i- 다음 줄을 삽입하세요.

backup/*.sql실행할 파일입니다 sed.

답변3

폴더의 각 파일을 반복할 수 있습니다.

for item in $(ls backup/ | grep "*.sql")
do
echo "use my_db;" >> $item
done

관련 정보