Freebsd:シェルスクリプトを使用したポイントファイルのバックアップ

Freebsd:シェルスクリプトを使用したポイントファイルのバックアップ

ドットファイルをコピーするには、単純なシェルスクリプトが必要です。.サポート拡張、つまり.dotfile1.バックアップ。既存のバックアップに拡張機能を追加するのに時間がかかるため、以下のスクリプトは機能しません。.dotfile1.backup.backup

bkdot.sh

#!/bin/sh
for file in .*; do
    cp “./$file” “./$file.backup”
done

次のスクリプトはトリックを実行する必要があるようですが、何も起こりません。何が欠けていますか?

bkdot_revised.sh

#!/bin/sh
for file in .*; do
     if [ ! “./$file.backup” ]; then
         cp “./$file” “./$file.backup”
     fi
done

ベストアンサー1

テストに[十分な情報がありません。$file参考資料と比較してください。現在の構成では、「xがこの文字列ではない場合」と呼ばれていますが、「xがこの文字列ではない場合」と言う必要があります。[[代わりに正規表現を使用します[

#!/bin/bash
GLOBIGNORE=.:..
for file in .*; do
     if [[ ! "$file" =~ \.backup$ ]]; then
         cp "$file" "$file.backup"
     fi
done
  • Kusalanandaのコメントに基づいて、ビルドが正しく機能していることを/bin/bash確認するためにshebangを移動しました。[[
  • Gordon Davidsonのコメントに基づいて、GLOBIGNOREスクリプトがコピーしようとしないように.追加します。..

その他:

  • ./パスには不要です。あなたはすでにこのディレクトリにいます!
  • これがコピー/貼り付けの問題であるかどうかはわかりませんが、代わりに問題があります"
  • 個人的には、私は他のディレクトリにコピーしてこれらの問題をすべて回避し、ホームディレクトリを汚染するのを防ぎます。実際、私はすべてを(増分的に)バックアップします!

これは純粋な/bin/shバージョンです。[[bashismを使う代わりにケース代わりに。

#!/bin/sh
GLOBIGNORE=.:..
for file in .*; do
  case "$file" in
    *.backup) ;;
    *) cp "$file" "$file.backup";;
  esac
done

おすすめ記事