Viết văn bản vào dòng đầu tiên của mỗi tệp


1

Tôi muốn ứng dụng web của mình là phần mềm miễn phí, có giấy phép GNU. Tôi đã đọc rằng tôi nên thêm tên và giấy phép trong mỗi tệp. Tôi có rất nhiều tệp, vì vậy tôi đoán rằng tôi có thể thực thi một lệnh để ghi các dòng đó vào tất cả các tệp. Tôi đã tìm kiếm xung quanh và tìm thấy sedlệnh để chèn văn bản. Vì vậy, tôi sẽ làm:

sed -i '1 i\/* Copyright 2013 Manolo Salsas  \nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA*/ ' ./*

nhưng lệnh này không được đệ quy, vì vậy tôi nên làm:

find ./* -type f | xargs sed -i '1 i\/* Copyright 2013 Manolo Salsas  \nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA*/ '

Nó nên chèn các dòng đó vào các dòng đầu tiên của mỗi tệp (mong đợi các dòng ẩn bắt đầu bằng dấu chấm), nhưng nó không hoạt động.

Tôi có thể làm gì sai?

Tôi có nên thực sự thêm dòng này vào MERYI tập tin?


Những gì không làm việc có nghĩa là gì? Điều gì xảy ra nếu bạn thực hiện lệnh thứ hai? Lệnh đầu tiên có hoạt động như mong đợi không? Bạn đang sử dụng hệ điều hành nào?
Dennis

1
Xem thêm Câu hỏi thường gặp của FSF về "Tại sao tôi nên đặt thông báo giấy phép trong mỗi tệp nguồn": gnu.org/licenses/gpl-faq.html#NoticeInSourceFile và trong chính giấy phép GPL: "An toàn nhất là đính kèm chúng vào bắt đầu của mỗi tệp nguồn để nêu rõ nhất việc loại trừ bảo hành "(trong" Cách áp dụng các điều khoản này cho các chương trình mới của bạn ", gần cuối)
Edward

Câu trả lời:


4

Giải pháp của bạn hoạt động (sao chép và dán vào vỏ của tôi), ngoại trừ việc nó cũng chạm vào các dấu chấm trong các thư mục con. Để tránh chạm vào những cái đó, bạn cần phải gọi findnhư

find -type f \! -name '.*' | xargs sed -i '1 i\/* ... */'

( -andđược giả định giữa -type f\! -name '.*'). Lưu ý rằng tôi cần phải thoát ra khỏi !vỏ của mình (Bash).

Lưu ý rằng inserttùy chọn sed không hoạt động nếu các tệp trống. Nếu bạn viết một số văn bản trong các tập tin của thư mục hiện tại, nó sẽ hoạt động.

Ngoài các tập tin cấu hình, bạn nên tránh ghi vào hình ảnh. Tôi đoán là sẽ tốt hơn nếu chỉ định các định dạng sẽ được viết. Một cái gì đó như thế này:

find ./* -regex ".*\.\(php\|js\|txt\|html\|css\|yml\|twig\)" -type f | xargs sed -i '1 i\/* CCCopyright 2013 Manolo Salsas  [B\nThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA*/ '

Cập nhật:

Một giải pháp khác để lọc các tệp dựa trên các loại tệp là sử dụng tính năng chọn loại tệp của ack . Chẳng hạn, giả sử, bạn chỉ muốn chọn tệp C và Perl:

ack -f --type=cc --type=perl | xargs sed -i '1 i\/* ... */'

( type=ccviết tắt của C)


Không làm việc cho tôi.
Manolo

Có một vấn đề khác. Nếu bạn có hình ảnh trong thư mục đó, những hình ảnh đó sẽ vi phạm. Bạn nên bao gồm các định dạng mong muốn được viết.
Manolo

@ManoloSalsas Xin đừng đặt câu hỏi vào câu trả lời. Việc bạn có nên thêm dòng này vào mỗi tệp hay không tùy thuộc vào giấy phép yêu cầu. Thông thường nó nên đi trong mọi tệp nguồn dựa trên văn bản.
slhck

@slhck - Cảm ơn bạn rất nhiều. Tôi sẽ đưa vào tài khoản.
Manolo

@Raystafarian "Cắt xén" bạn đã chỉnh sửa là giấy phép mà OP cần thêm vào mỗi tệp. Xin đừng loại bỏ nó.
slhck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.