В настоящее время я использую следующую команду, чтобы изменить окончания строки dos2unix, но это для file-y file...
sed -i 's/\r//' filename
Есть ли способ запустить эту команду для всех файлов в каталоге?
В настоящее время я использую следующую команду, чтобы изменить окончания строки dos2unix, но это для file-y file...
sed -i 's/\r//' filename
Есть ли способ запустить эту команду для всех файлов в каталоге?
for i in `find . -type f \( -name "*.c" -o -name "*.h" \)`; do sed -i 's/\r//' $i ; done
Самый простой способ запустить dos2unix
для всей директории рекурсивно - просто выполнить команду find
для каждого найденного файла на основе ваших критериев.
Например, чтобы найти все файлы (исключая имена каталогов) в вашем текущем каталоге и всех его подкаталогах и dos2unix
выполнить преобразование по умолчанию для каждого из этих файлов:
find . -type f -exec dos2unix -k -s -o {} ';'
Это выводит каждое имя файла, но не обязательно меняет каждый из них. Это работает следующим образом:
find .
: найти что-нибудь в этом каталоге, включая его подкаталоги, и что-нибудь в этих подкаталогах (рекурсия) -type f
: вернуть только имена "обычного файла". Исключить имена папок из результатов. -exec
: Выполните следующую команду для каждого результата. Все, что находится за пределами этой точки, должно рассматриваться как часть этой команды, пока не будет найден символ ;
. dos2unix
: dos2unix
будет выполняться со следующими параметрами... -k
: сохранить отметку даты выходного файла так же, как входной файл -s
: пропускать двоичные файлы (изображения, архивы и т.д.). Эта опция включена по умолчанию, но я использую ее в любом случае, если в некоторых системах по умолчанию были разные, например, OS X v. Debian v. CentOS v. Ubuntu v....).
-o
: записать изменения непосредственно в файл, а не создавать новый файл с данными в новом формате. {}
: Это сообщает find
вставить имя файла, которое он нашел, в качестве параметра вызова dos2unix
. ';'
: Сообщите find
, что параметры для dos2unix
завершены. Все, что находится за пределами этой точки, снова будет рассматриваться как параметр find
.
Другая опция: find your_dir type f -exec sed -i 's/\r//' {} \;
Почему вы не используете команду dos2unix? Если вы делаете только sed выше, могут быть файлы (в зависимости от их источника), которые будут иметь неправильный EOF (вы можете увидеть его, если вы запустите cat, а подсказка впоследствии будет объединена с выходом файла)
dos2unix *.txt
отлично работает, чтобы преобразовать все *.txt файлы в каталог... нет необходимости в команде "find".
Простой:
sed -i 's/\r//' filename1 filename2 … filenameN
или, если вы говорите о содержании одного каталога
sed -i 's/\r//' *
Работайте хорошо для меня.
Просто добавив еще одну ссылку...
В Ubuntu 14.04 страница man dos2unix
содержит этот пример, в частности, для отказоустойчивого преобразования:
find . -name *.txt | xargs dos2unix
Цитата из страницы man, это будет
... преобразовать все .txt файлы в дерево каталогов под текущим каталог...
использовать
for i in `ls directory_path`; do sed -i 's/\r//' $i ; done
для всего каталога.
find $(pwd) -type f | xargs -I xxx sed -i 's/\r//g' xxx