特定の種類のすべてのファイルを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 ''を作成したりせずにファイルを所定の場所に変更することができます。

答え2

find変換するファイルの検索と追加-exec(または)操作を使用して変換プログラムを実行します-execdir。たとえば、bd2w現在のディレクトリから始まる.cppすべてのファイルに対して実行するには、.h次のコマンドを使用します。

find . -type f -name "*.cpp" -o -name "*.h" -exec bd2w '{}' \;

私は上記のコメントが表現した懸念に同意すると言わなければなりません。あなたの経験はあなたの人生を不必要に困難にしませんか?あなたが唯一の開発者であっても、コードが2つの異なるコンピュータにある場合は、ローカルでgitを設定することをお勧めします。リムーバブルデバイスにリポジトリを配置すると、ソースをプッシュ/プルできます。これにより、両方のコンピュータでソースを最新の状態に維持しようとするとエラーは発生しません。そしてコーディングの問題を解決します。

関連情報