Find and Convert Files Ending With CRLF on Linux


You can use the find command in Linux to search for files ending with CRLF, and the dos2unix command to convert those files to use LF line endings.

To search for files ending with CRLF, you can use the following command −

find /path/to/search -type f -exec grep -Iq . {} \; -and -exec grep -Il $'\r' {} +

This command searches for all regular files in the directory "/path/to/search" and its subdirectories, and prints the names of the files that contain CRLF line endings.

Once you have identified the files that need to be converted, you can use the dos2unix command to convert them. The dos2unix command is a command-line utility that can convert files from Windows-style line endings (CRLF) to Linux-style line endings (LF).

You can convert a specific file by running the command −

dos2unix file.txt

Or you can convert multiple files by running the command −

find /path/to/search -name "*.*" -exec dos2unix {} +

This will convert all files recursively under /path/to/search

Please note that the dos2unix command may need to be installed on your system. If you receive a "command not found" error, you can install it by running the appropriate package manager command for your Linux distribution.

Searching for Files With CRLF Endings

You can use the grep command to search for files with CRLF (carriage return + line feed) line endings. One way to do this is to use the -r option to search recursively through a directory, the -l option to print only the names of the files that contain a match, and the $'\r' regular expression to match the CR character.

For example, the following command will search for all files in the directory /path/to/search and its subdirectories that contain CRLF line endings, and print the names of those files −

grep -rl $'\r' /path/to/search

Alternatively, you can use find command in conjunction with grep command

find /path/to/search -type f -exec grep -Iq . {} \; -and -exec grep -Il $'\r' {} +

This command will search recursively under /path/to/search and will print the names of files that have CRLF line endings.

Searching for Files With CRLF Endings using cat command

You can use the cat command in combination with the grep command to search for files with CRLF (carriage return + line feed) line endings. The cat command is used to concatenate and display the contents of a file, and can be used in combination with the grep command to search for specific patterns within a file.

One way to search for files with CRLF line endings is to use the -r option of the find command to search recursively through a directory and the -n option of the cat command to display line numbers in the output.

For example, the following command will search for all files in the directory /path/to/search and its subdirectories, and display the line numbers where CRLF line endings occur.

find /path/to/search -type f -exec sh -c 'cat -n "$1" | grep $'\r'' {} \;

This command will print the line numbers in the files that have CRLF line endings. You can modify the above command according to your requirement by replacing -n option of cat with other options and also the -type f is for searching for files only, if you want to search for other types like directories you can change it accordingly.

Convert CRLF to LF using sed command

You can use the sed command to convert CRLF (carriage return + line feed) line endings to LF (line feed) line endings. sed stands for "stream editor", and it can be used to perform basic text transformations on an input stream (a file or input from a pipeline).

Here's an example command that will convert CRLF line endings to LF in a file named file.txt −

sed -i 's/\r
/
/g' file.txt

The -i option is used to edit the files in place. The s/\r
/
/g is a regular expression that searches for \r
(CRLF) and replaces it with
(LF). The g at the end of the expression indicates that all occurrences should be replaced.

You can also use find command in conjunction with sed command to convert multiple files at once. The following command will recursively search under directory /path/to/search and convert all files with CRLF line endings to LF line endings.

find /path/to/search -type f -exec sed -i 's/\r
/
/g' {} +

The {} + at the end of the command is used to pass multiple filenames to sed command at once, so that multiple files can be modified at the same time.

Please keep in mind, that the -i option of sed command creates a backup file if its used without a specified suffix. It can be overridden with a desired suffix of backup file like -i.bak

Conclusion

In conclusion, there are several ways to search for and convert files with CRLF line endings on a Linux system. The grep, find, dos2unix, sed and cat commands are all useful tools for accomplishing this task.

grep can be used to search for files that contain CRLF line endings and print the names of those files.

find can be used to recursively search a directory and its subdirectories for files, and execute a command on the files that match a certain pattern

dos2unix is a command-line utility that can convert files from Windows-style line endings (CRLF) to Linux-style line endings (LF).

sed can be used to perform basic text transformations on a file, such as replacing CRLF line endings with LF line endings.

cat command can be used to display the contents of a file and in combination with grep command it can be used to search for CRLF line endings in a file.

It's important to make sure that the files that you convert are backups so that you can rollback in case of any issues with the conversion.

Updated on: 24-Jan-2023

9K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements