プログラミングディレクトリをバックアップする

プログラミングディレクトリをバックアップする

コンパイルされた C プログラムが多数入ったディレクトリがあり、これをバックアップしたいと考えています。現在は という名前が付けられていますprogram.outが、これを に変更したいと思いますprogram

これらを除外することはまだ可能ですか? また、これらすべての名前をすばやく変更するには、どのような正規表現を使用すればよいですか?

答え1

コードをバックアップするには、git またはその他のバージョン管理ソフトウェアを使用します。インターネット上には、github、bitbucket など、多くの選択肢があります。

gitでは.gitignoreファイルがあり、そこに*.outを追加するとリポジトリに転送されません。

答え2

最初の質問がよくわかりません。名前を変更したい場合はprogram.outprogram次のコマンドを実行してください。

mv program{.out,}

/etc2 番目の質問では、サフィックスを持つファイルのリストを取得したいと仮定します。

#!/bin/bash
ls /etc > /tmp/etcfiles
while read line
do
   if [[ $line =~ \..+ ]]; then
      echo $line
   fi
done < /tmp/etcfiles

必要に応じて上記を調整できます。

  • \.文字通りのピリオドと一致します。
  • .ピリオドの後の任意の文字に一致します。
  • +は、最初のピリオドの後に少なくとも 1 つの文字が続く必要があることを示しています。したがって、これは に一致しますtest.cが、 には一致しません。 もtest.一致させたい場合は、を にtest.変更します。+*

答え3

シェルとして bash を使用している場合、これはシェル パイプラインの簡単なタスクです。

ls | grep '\.out$' | while read file; do echo mv "$file" "${file%.*}"; done

lsディレクトリ内のファイルのリストを生成します。

grep '\.out$'.out で終わるファイル名を抽出し、残りを破棄します。

while read fileファイル名を 1 つずつ読み取ります。

echo mv "$file" "${file%.*}"表示はしますが、各ファイルの名前を拡張子なしのバージョンに変更する mv コマンドは実行しません。重要${file%.*}なのは、ファイル拡張子を削除するための bash 構文です。パイプラインを実際に実行した場合に期待どおりに動作することを確認したら、そのecho部分を削除して実際に実行します。

ls | grep '\.out$' | while read file; do mv "$file" "${file%.*}"; done

関連情報