web-dev-qa-db-ja.com

ディレクトリ全体でdos2unixを実行する方法を教えてください。

dos2unixを使ってディレクトリ全体を変換する必要があります。これを行う方法を私は理解することができません。

265
Vivek Gaur

find . -type f -print0 | xargs -0 dos2unix

現在のディレクトリ内のすべてのファイルを再帰的に検索し、これらのファイルを要求します。dos2unixコマンド

478
CyberDem0n

それが大きなディレクトリの場合は、複数のプロセッサで実行することを検討してください。

find . -type f -print0 | xargs -0 -n 1 -P 4 dos2unix 

これは一度に1ファイルを渡し、4プロセッサを使用します。

62
nikc

たまたまdos2unixに満足していなかったので、私は自分自身の単純なユーティリティを公開しました。速度と予測可能性の点でいくつかの利点がありますが、構文も少し単純です。

endlines unix *

そして、あなたがそれをサブディレクトリ(隠されたディレクトリと非テキストファイルをスキップする)に降ろしたいならば:

endlines unix -r .

endlinesはこちらから入手できます https://github.com/mdolidon/endlines

20
Mathias Dolidon

.git.などの隠しファイルやフォルダーをスキップするのがおそらく最善です。したがって、findバージョンが十分に新しい場合、またはbashを使用している場合は、zshを使用する代わりに、ただやる:

dos2unix **

Bashの場合、これには以下が必要であることに注意してください。

shopt -s globstar

....しかし、これは十分に便利な機能なので、正直に言って.bashrcに入れる必要があります。

しない隠しファイルとフォルダーをスキップしたいが、findをいじりたくない場合(そして、私はあなたを責めない) only隠しエントリに一致するrecursive-glob引数:

dos2unix ** **/.*

どちらの場合も、グロブはディレクトリを含むように拡張されるため、次の警告が表示される可能性があることに注意してください(潜在的に何回も):Skipping <dir>, not a regular file.

13
Kyle Strand

Solarisユーザ(5.10を使用しています)。他のUNIXシステムと同様に、より新しいバージョンにも適用できます。

dos2unixはデフォルトでファイルを上書きすることはしません、それはただ更新されたバージョンを標準出力にプリントするでしょう、それであなたはソースとターゲットを指定する必要があるでしょう、すなわち同じ名前を二度指定します:

find . -type f -exec dos2unix {} {} \;
6
Brett

一般的な使用例は、Gitリポジトリにコミットされたすべてのファイルの行末を標準化することです:

git ls-files | xargs dos2unix

特定のファイル(*.sln*.batなど)などは、Windowsオペレーティングシステムでは only として使用され、keepCRLFの末尾には次のように入力してください。

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

必要に応じて.gitattributesを使用してください

2
friederbluemle
for FILE in /var/www/html/files/*
do
 /usr/bin/dos2unix FILE
done
2
rafapedroche

私は同じ問題を抱えており、ここの投稿のおかげで私はそれを解決しました。私は約100個のファイルがあることを知っていたので、*。jsファイルに対してのみ実行する必要がありました。 find . -type f -name '*.js' -print0 | xargs -0 dos2unix

ご協力ありがとうございました。

1
Strabek

サブディレクトリがない場合は、あなたも取ることができます

ls | xargs -I {} dos2unix "{}"