dos2unix
ฉันมีการแปลงสารบบทั้งหมดใช้ ฉันไม่สามารถหาวิธีการทำสิ่งนี้ได้
dos2unix
ฉันมีการแปลงสารบบทั้งหมดใช้ ฉันไม่สามารถหาวิธีการทำสิ่งนี้ได้
คำตอบ:
find . -type f -print0 | xargs -0 dos2unix
จะค้นหาไฟล์ทั้งหมดซ้ำภายในไดเรกทอรีปัจจุบันซ้ำและเรียกใช้ไฟล์เหล่านี้คำสั่ง dos2unix
\;; echo Hello
find
เรียกใช้ไม่ได้ทำการตรวจสอบนี้ (แม้ว่าจะง่ายพอที่จะเพิ่ม) แต่ความทันสมัยdos2unix
จะข้ามไฟล์ไบนารีอย่างถูกต้อง
หากเป็นไดเรกทอรีขนาดใหญ่คุณอาจต้องการลองใช้ตัวประมวลผลหลายตัว:
find . -type f -print0 | xargs -0 -n 1 -P 4 dos2unix
การดำเนินการนี้จะส่ง 1 ไฟล์ต่อครั้งและใช้โปรเซสเซอร์ 4 ตัว
n
ตามลำดับความสำคัญหรือสองไฟล์ (ขึ้นอยู่กับจำนวนไฟล์ที่เรากำลังพูดถึงที่นี่)
เมื่อฉันได้รับความพึงพอใจจาก dos2unix ฉันจึงได้ใช้เครื่องมือง่ายๆของฉัน นอกเหนือจากข้อดีเล็กน้อยในเรื่องความเร็วและการคาดการณ์ได้แล้วไวยากรณ์ยังง่ายขึ้นอีกเล็กน้อย:
endlines unix *
และถ้าคุณต้องการที่จะลงไปในไดเรกทอรีย่อย (ข้าม dirs ที่ซ่อนอยู่และไฟล์ที่ไม่ใช่ข้อความ):
endlines unix -r .
endlines
สามารถใช้ได้ที่นี่https://github.com/mdolidon/endlines
dos2unix
อย่างไร? อยากรู้อยากเห็นอย่างแท้จริง
dos2unix
มากมายโดยมีความสามารถที่แตกต่างกัน (ตัวอย่างเช่น UTF32 บางอันอ่านในขณะที่บางตัวทำไม่ได้; มีเพียงหนึ่งendlines
ความสามารถที่เป็นที่รู้จักกันดี 2 / เสรีนิยมกับการป้อนข้อมูลไม่ได้ทั้งหมดdos2unix
ที่มี 3 / การสำรวจต้นไม้ไฟล์ที่มีประสิทธิภาพออกแบบมาให้รวดเร็วและใช้งานได้จริงกับไฟล์นับหมื่น 4 / ไม่มีกล่องใน OSX - ซึ่งมีความสำคัญน้อยกว่าตอนนี้ที่มีแพ็คเกจ Brew อยู่
อาจเป็นการดีที่สุดที่จะข้ามไฟล์และโฟลเดอร์ที่ซ่อนอยู่เช่น.git.
ดังนั้นแทนที่จะใช้find
หากbash
รุ่นล่าสุดของคุณเพียงพอหรือหากคุณใช้zsh
ให้ทำดังนี้
dos2unix **
โปรดทราบว่าสำหรับ Bash สิ่งนี้จะต้อง:
shopt -s globstar
.... แต่นี้เป็นคุณสมบัติที่มีประโยชน์พอที่คุณควรจะตรงไปตรงมาเพียงแค่ใส่ไว้ในของคุณ.bashrc
อยู่แล้ว
หากคุณไม่ต้องการข้ามไฟล์และโฟลเดอร์ที่ซ่อนอยู่ แต่คุณยังไม่ต้องการยุ่งกับfind
(และฉันจะไม่โทษคุณ) คุณสามารถให้อาร์กิวเมนต์ recursive-glob ตัวที่สองเพื่อจับคู่รายการที่ซ่อนอยู่เท่านั้น :
dos2unix ** **/.*
โปรดทราบว่าในทั้งสองกรณี glob จะขยายเพื่อรวมไดเรกทอรีดังนั้นคุณจะเห็นคำเตือนต่อไปนี้ (อาจเกิดขึ้นหลายครั้ง): Skipping <dir>, not a regular file.
dos2unix
นามแฝงบางอย่างที่มีผลต่อการขยายตัวของข้อโต้แย้ง ผลลัพธ์ของtype dos2unix
ระบบของคุณคืออะไร?
**
แทนการfind
คือ "ข้ามไฟล์และโฟลเดอร์ที่ซ่อนอยู่เช่น.git
" dos2unix
ไม่เคยเห็นไฟล์ที่ซ่อนอยู่เพราะ**
ไม่ขยายเพื่อแสดง หากคุณต้องการที่จะทำงานโดยอัตโนมัติdos2unix
ในไฟล์ที่ซ่อนอยู่และโฟลเดอร์ที่คุณสามารถใช้find
หรือจะขยายตัวเพียงไฟล์ที่ซ่อนและโฟลเดอร์รวมทั้ง(dir ราก), (คน dir หลัก) และรายการอื่น ๆ ที่ซ่อนอยู่ในโฟลเดอร์ปัจจุบัน dos2unix ** **/.*
**/.*
.
..
dos2unix
เพียงพิมพ์Skipping <dir>, not a regular file.
เมื่อเรียกใช้ในไดเรกทอรีดังนั้นทำงาน..
และ.
ปลอดภัย) นอกจากนี้การรวมls
กับ glob ไม่ได้เป็นวิธีที่ดีในการตรวจสอบวิธีการขยายตัวของ glob; ใช้echo
แทน: echo **
จะพิมพ์ข้อโต้แย้งที่ได้รับจากdos2unix
dos2unix **
**
บอกเป็นนัยและการใช้echo
ทำให้ชัดเจน
กรณีการใช้งานทั่วไปดูเหมือนจะเป็นมาตรฐานการสิ้นสุดบรรทัดสำหรับไฟล์ทั้งหมดที่ส่งไปยังที่เก็บ Git :
git ls-files | xargs dos2unix
โปรดทราบว่าไฟล์บางอย่าง (เช่น*.sln
, *.bat
) ฯลฯ จะเพียงใช้ในระบบปฏิบัติการ Windows และควรให้CRLF
สิ้นสุด:
git ls-files '*.sln' '*.bat' | xargs unix2dos
หากจำเป็นให้ใช้ .gitattributes
สำหรับผู้ใช้โซลาริส (กำลังใช้ 5.10 อาจใช้ได้กับเวอร์ชันใหม่กว่าเช่นเดียวกับระบบยูนิกซ์อื่น ๆ ):
dos2unix ไม่ได้เป็นค่าเริ่มต้นในการเขียนทับไฟล์มันจะพิมพ์รุ่นที่อัปเดตเป็น stdout ดังนั้นคุณจะต้องระบุแหล่งที่มาและเป้าหมายเช่นชื่อเดียวกันสองครั้ง:
find . -type f -exec dos2unix {} {} \;
for FILE in /var/www/html/files/*
do
/usr/bin/dos2unix FILE
done
ฉันมีปัญหาเดียวกันและขอบคุณโพสต์ที่นี่ฉันได้แก้ไขมัน ฉันรู้ว่าฉันมีไฟล์ประมาณร้อยไฟล์และฉันต้องการเรียกใช้สำหรับไฟล์ * .js เท่านั้น
find . -type f -name '*.js' -print0 | xargs -0 dos2unix
ขอบคุณทุกท่านสำหรับความช่วยเหลือของคุณ
ฉันคิดว่าวิธีที่ง่ายที่สุดคือ:
dos2unix $(find . -type f)
ฉันได้ทำสิ่งนี้เป็นล้านครั้งดังนั้นวิธีการแก้ปัญหาของฉันคือเพียงแค่ใส่ฟังก์ชั่นทุบตีนี้ในสภาพแวดล้อมของคุณ
.bashrc
หรือ.profile
อะไรก็ตาม
dos2unixd() {
find $1 -type f -print0 | xargs -0 dos2unix
}
การใช้
$ dos2unixd ./somepath
วิธีนี้คุณยังมีคำสั่งเดิมและมันเป็นเรื่องง่ายที่จะจำคนนี้dos2unix
dos2unixd
หากไม่มีไดเรกทอรีย่อยคุณสามารถทำได้
ls | xargs -I {} dos2unix "{}"
dos2unix *
จะง่ายกว่าและจริง ๆ แล้วจะแข็งแกร่งกว่านี้ (โดยทั่วไปไม่แนะนำให้ใช้ท่อเอาท์พุตls
เพราะเป็นเครื่องมือการจัดรูปแบบและ*
เชื่อถือได้มากขึ้นสำหรับการใช้งานแบบเป็นโปรแกรม)
find . -type f -print0 | xargs -0 dos2unix
จะแก้ปัญหาที่ฉันคิดว่า