• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Linuxについて)

Linux勉強中のハチャメチャな日々!Windowsとの違いに四苦八苦

このQ&Aのポイント
  • 最近Linuxを勉強し始め、Windowsとはまったく違う機能に四苦八苦する毎日です。
  • 質問者が作成したバックアップスクリプトについての心配があります。
  • 既存のバックアップファイルを上書きせずに警告文を表示した上でバックアップを行う設定にする方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

>for i in $* でもいいのですが、ファイル名にスペースが入っているとうまくいきません。 for i in "$@" の方がいいかもしれません > cp &i $i.bak &iではなく $i ですね。 ここも、スペース等を含むファイルがあるのなら cp "$i" "$i.bak" がよいです。 > do ループなどの終了はdoneです。 > また、バックアップを行う際にもし既にバックアップファイルが存在する場合には > 上書きをしないように、警告文を表示したあとにバックアップを行わないような設定にするにはどのようなスクリプトを足せばいいんでしょうか;; cp に -i オプションを付けて、コピーするかどうか聞いてくるようにする方法があります。 もう一つは、test(省略形の [ ] )を使ってファイルがあるかどうかの確認をして、ifで分岐する方法です。 #!/bin/sh #↑に -x や -v を付けると実行の様子が表示されます #どう動いているか、一度見ることをお勧めします for i in "$@" do j="$i.bak" #コピー先 if [ \! -f "$i" ] # コピー元がファイルであるかのチェック then echo "$i is not a file." elif [ -e "$j" ] #コピー先がすでにあるかのチェック then echo "File Exists: $j" else echo "copying $i" cp "$i" "$j" fi done

参考URL:
http://www.linux.or.jp/JM/html/GNU_sh-utils/man1/test.1.html
bacqmas1
質問者

お礼

ものすごく丁寧な回答ありがとうございました。 助かりました!

関連するQ&A