特定の種類のすべてのファイルをUnix形式からDos形式に変換するBashスクリプト

特定の種類のすべてのファイルをUnix形式からDos形式に変換するBashスクリプト

両方のシステムで開発されたC ++プロジェクトのために、CentOSとWindowsを切り替えることができるはずです。 UnixからDosに特定のタイプ(*.cpp、*.h、*.txtなど)のすべてのファイルを変換できるようにしたいです。

単一のファイルを変換するbashスクリプトがありますが、ファイルタイプの拡張子または* .FILETYPEのみを入力して、そのタイプの特定のディレクトリ内のすべてのファイルを変換できるようにしたいと思います。

以下は作業スクリプトです。一度に複数のファイルで動作させるにはどうすればよいですか? forループを試しましたが、構文エラーが発生しました。

#! /bin/sh

# Convert a text based file from Unix Format to Dos Format
# The Output file should be the name of the input file with
# WF inserted before the file extention
#
# Examples
#    convert Unix format abc.txt to abcWF.txt Windows Format 
#    convert Unix format abc.cpp to abcWF.cpp Windows Format 

echo "In u2w FileToConvert = $1"
    FileBase=$(basename $1)
    FileExtension="${FileBase##*.}"
    FileBase="${FileBase%.*}"
    OutputSuffix="WF.$FileExtension"
    OutputFile="$FileBase$OutputSuffix"
    commandment="unix2dos -n $1 $OutputFile"
    echo $commandment
    unix2dos -n $1 $OutputFile
    echo "diff -w $1 $OutputFile"
    diff -w "$1" "$OutputFile"

exit

実行例

$  bd2w TestResults.txt
In u2w FileToConvert = TestResults.txt
unix2dos -n TestResults.txt TestResultsWF.txt
unix2dos: converting file TestResults.txt to file TestResultsWF.txt in DOS format ...
diff -w TestResults.txt TestResultsWF.txt

ベストアンサー1

UnixからDOSへ

*.hたとえば、すべてのファイルをDOS形式に変換するには、次のようにします。

sed -i '/\r/! s/$/\r/' *.h

この条件は、/\r/!sedにすでにキャリッジリターンがあるすべての行をスキップするように指示します。したがって、同じファイルでこのコマンドを複数回実行するのは安全です。

置換コマンドは、s/$/\r/各行の末尾にキャリッジリターン文字を追加します。

このオプションは-ised にファイルをその場で変更するよう指示します。元のバックアップを維持したい場合:

sed -i.bak '/\r/! s/$/\r/' *.h

DOSからUNIXへ

*.hすべてのファイルをDOSからUnixに内部変換するには:

sed -i 's/\r$//' *.h

このコマンドは、同じファイルで複数回安全に実行することもできます。

オペレーティングシステム/BSD

BSD(OSX)sedの場合、options引数は-iオプションではなく必須です。そのため-i.bak、拡張機能を使用してバックアップを作成したり、.bakバックアップ-i ''を作成したりせずにファイルを所定の場所に変更することができます。

おすすめ記事