วิธีการใช้ dos2unix ซ้ำกับเนื้อหาทั้งหมดของโฟลเดอร์?


11

มีวิธีใช้dos2unixคำสั่งเพื่อให้ทำงานกับไฟล์ทั้งหมดในโฟลเดอร์และโฟลเดอร์ย่อยหรือไม่? man dos2unixไม่แสดง-rตัวเลือกใด ๆหรือคล้ายกันที่จะทำให้สิ่งนี้ตรงไปข้างหน้า?

คำตอบ:



3

การข้ามไบนารีและไฟล์ที่ซ่อนมีความสำคัญสำหรับฉัน:

อันนี้ใช้ได้ดีสำหรับฉัน:

find . -type f -not -path '*/\.*' -exec grep -Il '.' {} \; | xargs -d '\n' -L 1 dos2unix -k

ซึ่งแปลเป็น: ค้นหาไฟล์ที่ไม่ซ่อนทั้งหมดในไดเรกทอรีปัจจุบันซ้ำแล้วใช้ grep แสดงรายการไฟล์ที่ไม่ว่างเปล่าที่ไม่ใช่ไบนารี (-I) ทั้งหมดแล้วไพพ์ลงใน xargs (คั่นด้วยบรรทัดใหม่) ทีละไฟล์เพื่อ dos2unix และเก็บบันทึกเวลาเดิม

ดูสิ่งนี้ด้วย:

https://github.com/mdolidon/endlines


2

คุณสามารถใช้ find เพื่อค้นหาไฟล์ทั้งหมดในโครงสร้างไดเร็กทอรีที่คุณต้องการรันผ่านคำสั่ง dos2unix ของคุณ

find /path/to/the/files -type f -exec dos2unix {} \;

ลองดูที่ man page เพื่อค้นหามีตัวเลือกมากมายที่คุณสามารถใช้เพื่อระบุสิ่งที่ได้รับการประเมิน


สิ่งนี้ไม่ทำงาน
Alex Kinman

2
ระวังมากที่จะใช้งานสิ่งนี้หากมีไดเรกทอรี. git อยู่ทุกที่ในแผนผังต้นไม้ ... มันทำให้ที่เก็บ git ในเครื่องของฉันเสียหาย
Aaron_H

1

ใช้สัญลักษณ์แทน เช่นนี้: (หากคุณอยู่ในโฟลเดอร์)

dos2unix *

หรือถ้าคุณอยู่นอกโฟลเดอร์ให้ทำ:

dos2unix /path/to/folder/*

1

การใช้bash:

shopt -s globstar
dos2unix **

globstarตัวเลือกเปลือกในbashช่วยให้การใช้งานของ**glob สิ่งนี้ใช้ได้เหมือน*แต่ตรงข้าม/ในชื่อพา ธ (ดังนั้นชื่อที่ตรงกันในไดเรกทอรีย่อยด้วย) สิ่งนี้จะทำงานในไดเรกทอรีที่มีไฟล์จำนวนปานกลางในไดเรกทอรีย่อย (ไม่มากหลายพัน)

ในzshและyashเปลือกหอย (มีset -o extended-globในyash) คุณจะทำอย่างไร

dos2unix **/*
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.