両方のシステムで開発された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/
各行の末尾にキャリッジリターン文字を追加します。
このオプションは-i
sed にファイルをその場で変更するよう指示します。元のバックアップを維持したい場合:
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 ''
を作成したりせずにファイルを所定の場所に変更することができます。