How can I run dos2unix on an entire directory?

Viewed 275928

I have to convert an entire directory using dos2unix. I am not able to figure out how to do this.

11 Answers

A common use case appears to be to standardize line endings for all files committed to a Git repository:

git ls-files -z | xargs -0 dos2unix

Keep in mind that certain files (e.g. *.sln, *.bat) are only used on Windows operating systems and should keep the CRLF ending:

git ls-files -z '*.sln' '*.bat' | xargs -0 unix2dos

If necessary, use .gitattributes

I think the simplest way is:

dos2unix $(find . -type f)

I've googled this like a million times, so my solution is to just put this bash function in your environment.

.bashrc or .profile or whatever

dos2unixd() {
  find $1 -type f -print0 | xargs -0 dos2unix
}

Usage

$ dos2unixd ./somepath

This way you still have the original command dos2unix and it's easy to remember this one dos2unixd.

I have had the same problem and thanks to the posts here I have solved it. I knew that I have around a hundred files and I needed to run it for *.js files only. find . -type f -name '*.js' -print0 | xargs -0 dos2unix

Thank you all for your help.

for FILE in /var/www/html/files/*
do
 /usr/bin/dos2unix FILE
done
Related