Saya harus mengonversi seluruh direktori menggunakan dos2unix
. Saya tidak dapat menemukan cara untuk melakukan ini.
333
find . -type f -print0 | xargs -0 dos2unix
Akan secara rekursif menemukan semua file di dalam direktori saat ini dan memanggil file ini dengan perintah dos2unix
find . -type f -print0 | xargs -0 dos2unix
akan memecahkan masalah yang saya pikir.\;; echo Hello
find
permohonan tidak melakukan pemeriksaan ini (meskipun itu akan cukup sederhana untuk ditambahkan), tetapi moderndos2unix
dengan benar melewatkan file biner.Jika itu direktori besar, Anda mungkin ingin mempertimbangkan untuk menjalankan dengan beberapa prosesor:
Ini akan melewati 1 file sekaligus, dan menggunakan 4 prosesor.
sumber
n
meningkatkannya dengan urutan satu atau dua (tergantung pada berapa banyak file yang kita bicarakan di sini)Ketika saya kurang puas dengan dos2unix, saya meluncurkan utilitas sederhana saya sendiri. Terlepas dari beberapa keunggulan dalam kecepatan dan prediktabilitas, sintaksisnya juga sedikit lebih sederhana:
Dan jika Anda ingin masuk ke subdirektori (melewatkan direktori tersembunyi dan file non-teks):
endlines
tersedia di sini https://github.com/mdolidon/endlinessumber
dos2unix
? Sangat penasaran.dos2unix
, dengan kemampuan yang berbeda-beda (beberapa membaca UTF32 misalnya, sementara beberapa tidak; endline tidak). Hanya ada satuendlines
, yang kemampuannya sudah terkenal. 2 / liberal pada input, tidak semuados2unix
. 3 / eksplorasi pohon file efisien, dirancang agar cepat dan praktis pada puluhan ribu file. 4 / kehabisan kotak pada OSX - yang kurang penting sekarang karena paket Brew ada.Mungkin lebih baik untuk melewatkan file dan folder tersembunyi, seperti
.git.
Jadi daripada menggunakanfind
, jikabash
versi Anda cukup baru atau jika Anda menggunakanzsh
, lakukan saja:Perhatikan bahwa untuk Bash, ini membutuhkan:
.... tetapi ini adalah fitur yang cukup berguna sehingga Anda harus jujur saja memasukkannya ke dalam Anda
.bashrc
.Jika Anda tidak ingin melewatkan file dan folder tersembunyi, tetapi Anda tetap tidak ingin mengacaukannya
find
(dan saya tidak akan menyalahkan Anda), Anda dapat memberikan argumen rekursif-glob kedua untuk mencocokkan hanya entri yang tersembunyi:Perhatikan bahwa dalam kedua kasus, gumpalan akan diperluas untuk memasukkan direktori, sehingga Anda akan melihat peringatan berikut (berulang kali berpotensi):
Skipping <dir>, not a regular file.
sumber
dos2unix
alias yang mempengaruhi bagaimana argumen diperluas. Apa outputtype dos2unix
pada sistem Anda?**
bukanfind
adalah untuk "melewatkan file dan folder tersembunyi, seperti.git
".dos2unix
tidak pernah melihat file yang disembunyikan, karena**
tidak diperluas untuk memperlihatkannya. Jika Anda ingin untuk secara otomatis menjalankandos2unix
pada file dan folder tersembunyi, Anda dapat menggunakanfind
ataudos2unix ** **/.*
The**/.*
akan memperluas hanya file tersembunyi dan folder, termasuk.
(root dir),..
(induk dir), dan setiap entri tersembunyi lainnya dalam folder saat ini.dos2unix
hanya mencetakSkipping <dir>, not a regular file.
ketika dijalankan pada direktori, jadi jalankan..
dan.
aman.) Selain itu, menggabungkanls
dengan bola bukanlah cara yang baik untuk memeriksa bagaimana bola diperluas; gunakanecho
sebaliknya:echo **
akan mencetak argumen yangdos2unix
menerima daridos2unix **
.**
tersirat, dan menggunakanecho
membuatnya menjadi jelas.Kasus penggunaan umum tampaknya adalah untuk membakukan akhir baris untuk semua file yang dikomit ke repositori Git :
Perlu diingat bahwa file tertentu (misalnya
*.sln
,*.bat
) dll hanya digunakan pada sistem operasi Windows dan harus tetap yangCRLF
berakhir:Jika perlu, gunakan
.gitattributes
sumber
Untuk setiap pengguna Solaris (saya menggunakan 5.10, dapat berlaku untuk versi yang lebih baru juga, serta sistem unix lainnya):
dos2unix tidak default untuk menimpa file, itu hanya akan mencetak versi yang diperbarui ke stdout, jadi Anda harus menentukan sumber dan target, yaitu nama yang sama dua kali:
sumber
sumber
Saya memiliki masalah yang sama dan terima kasih untuk posting di sini saya telah menyelesaikannya. Saya tahu bahwa saya memiliki sekitar seratus file dan saya perlu menjalankannya untuk file * .js saja.
find . -type f -name '*.js' -print0 | xargs -0 dos2unix
Terima kasih atas bantuannya.
sumber
Saya pikir cara paling sederhana adalah:
sumber
Saya sudah googled ini seperti jutaan kali, jadi solusi saya adalah dengan menempatkan fungsi bash ini di lingkungan Anda.
.bashrc
atau.profile
atau apalahPemakaian
$ dos2unixd ./somepath
Dengan cara ini Anda masih memiliki perintah asli
dos2unix
dan mudah diingat yang inidos2unixd
.sumber
Jika tidak ada sub-direktori, Anda juga dapat mengambilnya
sumber
dos2unix *
lebih sederhana dan sebenarnya akan lebih kuat dari ini. (Umumnya tidak disarankan untuk menyalurkan outputls
, karena merupakan alat pemformatan dan*
lebih dapat diandalkan untuk penggunaan terprogram.)ls
tidak baik