Tôi phải chuyển đổi toàn bộ thư mục bằng cách sử dụng dos2unix
. Tôi không thể tìm ra cách để làm điều này.
Tôi phải chuyển đổi toàn bộ thư mục bằng cách sử dụng dos2unix
. Tôi không thể tìm ra cách để làm điều này.
Câu trả lời:
find . -type f -print0 | xargs -0 dos2unix
Sẽ đệ quy tìm tất cả các tệp trong thư mục hiện tại và gọi cho các tệp này lệnh dos2unix
\;; echo Hello
find
gọi không thực hiện kiểm tra này (mặc dù điều đó đủ đơn giản để thêm vào), nhưng hiện đại dos2unix
bỏ qua các tệp nhị phân chính xác.
Nếu đó là một thư mục lớn, bạn có thể muốn xem xét việc chạy với nhiều bộ xử lý:
find . -type f -print0 | xargs -0 -n 1 -P 4 dos2unix
Điều này sẽ vượt qua 1 tệp cùng một lúc và sử dụng 4 bộ xử lý.
n
nâng nó lên theo một hoặc hai độ lớn (tùy thuộc vào số lượng tệp chúng ta đang nói ở đây)
Khi tôi cảm thấy hài lòng với dos2unix, tôi đã sử dụng tiện ích đơn giản của riêng mình. Ngoài một vài lợi thế về tốc độ và khả năng dự đoán, cú pháp cũng đơn giản hơn một chút:
endlines unix *
Và nếu bạn muốn nó đi vào các thư mục con (bỏ qua các thư mục ẩn và các tệp không phải là văn bản):
endlines unix -r .
endlines
có sẵn ở đây https://github.com/mdolidon/endlines
dos2unix
? Thực sự tò mò.
dos2unix
, với các khả năng khác nhau (một số đọc UTF32 chẳng hạn, trong khi một số thì không; endlines thì không). Chỉ có một endlines
, những khả năng được biết đến. 2 / tự do về đầu vào, không phải tất cả dos2unix
đều được. 3 / thăm dò cây tập tin hiệu quả, được thiết kế để nhanh chóng và thiết thực trên hàng chục ngàn tệp. 4 / hết hộp trên OSX - điều ít quan trọng hơn bây giờ là gói Brew tồn tại.
Có lẽ tốt nhất là bỏ qua các tệp và thư mục ẩn, chẳng hạn như .git.
Thay vì sử dụng find
, nếu bash
phiên bản của bạn đủ gần đây hoặc nếu bạn đang sử dụng zsh
, chỉ cần làm:
dos2unix **
Lưu ý rằng đối với Bash, điều này sẽ yêu cầu:
shopt -s globstar
.... nhưng đây là một tính năng đủ hữu ích mà bạn nên thành thật chỉ cần đặt nó trong .bashrc
dù sao đi nữa.
Nếu bạn không muốn bỏ qua các tệp và thư mục bị ẩn, nhưng bạn vẫn không muốn gây rối với find
(và tôi sẽ không đổ lỗi cho bạn), bạn có thể cung cấp một đối số đệ quy toàn cầu thứ hai để chỉ khớp với các mục bị ẩn:
dos2unix ** **/.*
Lưu ý rằng trong cả hai trường hợp, toàn cầu sẽ mở rộng để bao gồm các thư mục, vì vậy bạn sẽ thấy cảnh báo sau (có khả năng nhiều lần hơn): Skipping <dir>, not a regular file.
dos2unix
bí danh ảnh hưởng đến cách mở rộng đối số. Đầu ra type dos2unix
trên hệ thống của bạn là gì?
**
thay vì find
là "bỏ qua các tệp và thư mục ẩn, chẳng hạn như .git
". dos2unix
không bao giờ nhìn thấy các tập tin ẩn, bởi vì **
không mở rộng để hiển thị chúng. Nếu bạn muốn tự động chạy dos2unix
trên các tệp và thư mục ẩn, bạn có thể sử dụng find
hoặc dos2unix ** **/.*
The **/.*
sẽ chỉ mở rộng các tệp và thư mục ẩn, bao gồm .
(thư mục gốc), ..
(thư mục gốc) và bất kỳ mục ẩn nào khác trong thư mục hiện tại.
dos2unix
chỉ cần in Skipping <dir>, not a regular file.
khi chạy trên một thư mục, vì vậy chạy trên ..
và .
an toàn.) Ngoài ra, kết hợp ls
với một quả cầu không phải là một cách tốt để kiểm tra xem toàn cầu được mở rộng như thế nào; sử dụng echo
thay thế: echo **
sẽ in các đối số dos2unix
nhận được từ dos2unix **
.
**
ngụ ý, và sử dụng echo
làm cho nó rõ ràng.
Một trường hợp sử dụng phổ biến dường như là để chuẩn hóa các kết thúc dòng cho tất cả các tệp được cam kết với kho Git :
git ls-files | xargs dos2unix
Hãy ghi nhớ rằng các tệp nhất định (ví dụ *.sln
, *.bat
) vv đều chỉ được sử dụng trên hệ điều hành Windows và nên giữ cho các CRLF
kết thúc:
git ls-files '*.sln' '*.bat' | xargs unix2dos
Nếu cần thiết, sử dụng .gitattributes
Đối với bất kỳ người dùng Solaris nào (đang sử dụng 5.10, cũng có thể áp dụng cho các phiên bản mới hơn, cũng như các hệ thống unix khác):
dos2unix không mặc định ghi đè tập tin, nó sẽ chỉ in phiên bản cập nhật thành thiết bị xuất chuẩn, do đó bạn sẽ phải chỉ định nguồn và đích, tức là cùng tên hai lần:
find . -type f -exec dos2unix {} {} \;
for FILE in /var/www/html/files/*
do
/usr/bin/dos2unix FILE
done
Tôi đã googled điều này như một triệu lần, vì vậy giải pháp của tôi là chỉ đưa chức năng bash này vào môi trường của bạn.
.bashrc
hoặc .profile
bất cứ điều gì
dos2unixd() {
find $1 -type f -print0 | xargs -0 dos2unix
}
Sử dụng
$ dos2unixd ./somepath
Bằng cách này, bạn vẫn có lệnh gốc dos2unix
và thật dễ dàng để nhớ lệnh này dos2unixd
.
Nếu không có thư mục con, bạn cũng có thể lấy
ls | xargs -I {} dos2unix "{}"
dos2unix *
đơn giản hơn và thực sự sẽ mạnh hơn thế này. (Nó thường không được khuyến khích để ống đầu ra của ls
, bởi vì nó là một công cụ định dạng và *
đáng tin cậy hơn cho việc sử dụng chương trình.)
find . -type f -print0 | xargs -0 dos2unix
tôi sẽ giải quyết vấn đề