Bagaimana cara menerapkan dos2unix secara rekursif ke semua isi folder?

11

Apakah ada cara untuk menerapkan dos2unixperintah sehingga berjalan terhadap semua file dalam folder dan subfoldernya? man dos2unixtidak menunjukkan -ropsi apa pun atau serupa yang akan membuat ini mudah?

Alex Kinman
sumber

Jawaban:

18

find /path -type f -print0 | xargs -0 dos2unix --

Stefan Paletta
sumber
2
Jangan khawatir, dos2unixlewati binari secara default.
Walf
3

Melewatkan binari dan file tersembunyi penting bagi saya:

Yang ini bekerja dengan baik untuk saya:

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

Yang diterjemahkan menjadi: menemukan semua file yang tidak tersembunyi secara rekursif di direktori saat ini, kemudian menggunakan grep, daftar semua file non-kosong non-biner (-I), kemudian pipa menjadi xargs (dibatasi oleh baris baru) satu file sekaligus untuk dos2unix dan simpan stempel waktu asli.

Lihat juga:

https://github.com/mdolidon/endlines

phyatt
sumber
2

Anda dapat menggunakan find untuk menemukan semua file dalam struktur direktori yang ingin Anda jalankan melalui perintah dos2unix Anda

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

Lihatlah halaman manual untuk menemukan, ada banyak opsi yang dapat Anda gunakan untuk menentukan apa yang akan dievaluasi

JayJay
sumber
Ini tidak berhasil.
Alex Kinman
2
Berhati-hatilah menjalankan ini jika ada direktori .git di mana saja di bawah pohon file ... itu merusak repositori git lokal saya.
Aaron_H
1

Gunakan wildcard. Seperti ini: (Jika Anda berada di folder)

dos2unix *

atau jika Anda berada di luar folder, lakukan:

dos2unix /path/to/folder/*
Nama tampilan
sumber
1

Menggunakan bash:

shopt -s globstar
dos2unix **

The globstarpilihan shell di bashmemungkinkan penggunaan **gumpal. Ini berfungsi seperti *tetapi cocok di /dalam nama path (karenanya mencocokkan nama dalam subdirektori juga). Ini akan berfungsi dalam direktori yang berisi jumlah file moderat dalam subdirektori (tidak ribuan).

Di zshdan yashkerang (dengan set -o extended-globdi yash), Anda akan lakukan

dos2unix **/*
Kusalananda
sumber