ドットファイルをコピーするには、単純なシェルスクリプトが必要です。.サポート拡張、つまり.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