質問編集履歴

13 検証の追記

sujico.net

sujico.net score 435

2018/11/20 09:02  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
【追加検証分】
→[index.php]
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
##追加検証
回答頂いた内容より、
rm -rfのパス指定のクォーテーションを外すことでパスが正しく解釈され、削除が動くようになりました。
しかし、[/home/xxx/kensyou/script/]の直下にファイル(仮にindex.phpなど)がある場合、index.phpの削除がなされないという動作になりました。
```sh
script_dir_path=$(dirname $(readlink -f $0))
rm -rf ${script_dir_path}/../*
```
上記スクリプトのsh -xでの実行結果
```sh
+++ readlink -f kensyou/script/delete.sh
++ dirname /home/xxx/kensyou/script/delete.sh
+ script_dir_path=/home/xxx/kensyou/script
+ rm -rf /home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
```
echoの内容としては、index.phpも含まれているため、
rm -rfの対象になりそうなのですが、実際にはindex.phpのみ削除がなされないという結果となりました。
###推測
index.phpより先にscriptディレクトリの中身が削除されてしまったため、
index.phpの削除処理が走らなかった?(要検証)
 → 回答いただいた方の環境では削除がされたので違う
ファイルのパーミッションの問題?
 → chmod 777でフルアクセスにしてみたが、削除されない
```sh
#スクリプト自身の絶対パス取得
script_dir_path=$(dirname $(readlink -f $0))
#ディレクトリ名取得
script_dir=`echo ${script_dir_path} | awk -F "/" '{ print $NF }'`
#最初に自分自身のディレクトリの親ディレクトリから、
#自分自身のディレクトリ以外の配下ディレクトリを削除する
ls ${script_dir_path}/../ | grep -v -E ${script_dir} | xargs rm -rf
#最後に自分自身のディレクトリの親ディレクトリから、
#全ての配下ディレクトリを削除する
rm -rf ${script_dir_path}/../*
```
上記のような内容で、最初に自分のディレクトリ以外を削除
次に自分を含めて削除とすればどうか検証しましたが、
やはりindex.phpだけが削除されずに残ってしまいました。
また、zzzというディレクトリを作成したところ、index.phpと同様に削除されずに残ってしまうことを確認いたしました。
また、zzzというディレクトリを作成したところ、index.phpと同様に削除されずに残ってしまうことを確認いたしました。
###検証で分かったこと(現状)
scriptディレクトリより後にindex.phpが削除されてしまうため、
「/home/xxx/kensyou/script/../index.php」というパスはありませんよ と怒られてしまっている
 ↓
scriptだけ最後に消したいが、うまくいかない
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

12 検証の追記

sujico.net

sujico.net score 435

2018/11/19 19:31  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
【追加検証分】
→[index.php]
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
##追加検証
回答頂いた内容より、
rm -rfのパス指定のクォーテーションを外すことでパスが正しく解釈され、削除が動くようになりました。
しかし、[/home/xxx/kensyou/script/]の直下にファイル(仮にindex.phpなど)がある場合、index.phpの削除がなされないという動作になりました。
```sh
script_dir_path=$(dirname $(readlink -f $0))
rm -rf ${script_dir_path}/../*
```
上記スクリプトのsh -xでの実行結果
```sh
+++ readlink -f kensyou/script/delete.sh
++ dirname /home/xxx/kensyou/script/delete.sh
+ script_dir_path=/home/xxx/kensyou/script
+ rm -rf /home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
```
echoの内容としては、index.phpも含まれているため、
rm -rfの対象になりそうなのですが、実際にはindex.phpのみ削除がなされないという結果となりました。
###推測
index.phpより先にscriptディレクトリの中身が削除されてしまったため、
index.phpの削除処理が走らなかった?(要検証)
 → 回答いただいた方の環境では削除がされたので違う
ファイルのパーミッションの問題?
 → chmod 777でフルアクセスにしてみたが、削除されない
 → chmod 777でフルアクセスにしてみたが、削除されない
```sh
#スクリプト自身の絶対パス取得
script_dir_path=$(dirname $(readlink -f $0))
#ディレクトリ名取得
script_dir=`echo ${script_dir_path} | awk -F "/" '{ print $NF }'`
#最初に自分自身のディレクトリの親ディレクトリから、
#自分自身のディレクトリ以外の配下ディレクトリを削除する
ls ${script_dir_path}/../ | grep -v -E ${script_dir} | xargs rm -rf
#最後に自分自身のディレクトリの親ディレクトリから、
#全ての配下ディレクトリを削除する
rm -rf ${script_dir_path}/../*
```
上記のような内容で、最初に自分のディレクトリ以外を削除
次に自分を含めて削除とすればどうか検証しましたが、
やはりindex.phpだけが削除されずに残ってしまいました。
また、zzzというディレクトリを作成したところ、index.phpと同様に削除されずに残ってしまうことを確認いたしました。
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

11 検証の追記

sujico.net

sujico.net score 435

2018/11/19 18:48  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
【追加検証分】
→[index.php]
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
##追加検証
回答頂いた内容より、
rm -rfのパス指定のクォーテーションを外すことでパスが正しく解釈され、削除が動くようになりました。
しかし、[/home/xxx/kensyou/script/]の直下にファイル(仮にindex.phpなど)がある場合、index.phpの削除がなされないという動作になりました。
```sh
script_dir_path=$(dirname $(readlink -f $0))
rm -rf ${script_dir_path}/../*
```
上記スクリプトのsh -xでの実行結果
```sh
+++ readlink -f kensyou/script/delete.sh
++ dirname /home/xxx/kensyou/script/delete.sh
+ script_dir_path=/home/xxx/kensyou/script
+ rm -rf /home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
```
echoの内容としては、index.phpも含まれているため、
rm -rfの対象になりそうなのですが、実際にはindex.phpのみ削除がなされないという結果となりました。
###推測
index.phpより先にscriptディレクトリの中身が削除されてしまったため、
index.phpの削除処理が走らなかった?(要検証)
index.phpの削除処理が走らなかった?(要検証)
 → 回答いただいた方の環境では削除がされたので違う
ファイルのパーミッションの問題?
 → chmod 777でフルアクセスにしてみたが、削除されない
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

10 追記

sujico.net

sujico.net score 435

2018/11/19 18:35  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
【追加検証分】
→[index.php]
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
##追加検証
回答頂いた内容より、
rm -rfのパス指定のクォーテーションを外すことでパスが正しく解釈され、削除が動くようになりました。
しかし、[/home/xxx/kensyou/script/]の直下にファイル(仮にindex.phpなど)がある場合、index.phpの削除がなされないという動作になりました。
```sh
script_dir_path=$(dirname $(readlink -f $0))
rm -rf ${script_dir_path}/../*
```
上記スクリプトのsh -xでの実行結果
```sh
+++ readlink -f kensyou/script/delete.sh
++ dirname /home/xxx/kensyou/script/delete.sh
+ script_dir_path=/root/kensyou/script
+ script_dir_path=/home/xxx/kensyou/script
+ rm -rf /home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
```
echoの内容としては、index.phpも含まれているため、
rm -rfの対象になりそうなのですが、実際にはindex.phpのみ削除がなされないという結果となりました。
###推測
index.phpより先にscriptディレクトリの中身が削除されてしまったため、
index.phpの削除処理が走らなかった?(要検証)
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

9 追記

sujico.net

sujico.net score 435

2018/11/19 18:34  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
【追加検証分】
→[index.php]
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
##追加検証
回答頂いた内容より、
rm -rfのパス指定のクォーテーションを外すことでパスが正しく解釈され、削除が動くようになりました。
しかし、[/home/xxx/kensyou/script/]の直下にファイル(仮にindex.phpなど)がある場合、index.phpの削除がなされないという動作になりました。
```sh
script_dir_path=$(dirname $(readlink -f $0))
echo ${script_dir_path}/../*
rm -rf ${script_dir_path}/../*
```
上記スクリプトのsh -xでの実行結果
```sh
+++ readlink -f kensyou/script/delete.sh
++ dirname /home/xxx/kensyou/script/delete.sh
+ script_dir_path=/root/kensyou/script
+ echo /home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
/home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
+ rm -rf /home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
```
echoの内容としては、index.phpも含まれているため、
rm -rfの対象になりそうなのですが、実際にはindex.phpのみ削除がなされないという結果となりました。
###推測
index.phpより先にscriptディレクトリの中身が削除されてしまったため、
index.phpの削除処理が走らなかった?(要検証)
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

8 検証の追記

sujico.net

sujico.net score 435

2018/11/19 18:18  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
【追加検証分】
→[index.php]
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
##追加検証
回答頂いた内容より、
rm -rfのパス指定のクォーテーションを外すことでパスが正しく解釈され、削除が動くようになりました。
しかし、[/home/xxx/kensyou/script/]の直下にファイル(仮にindex.phpなど)がある場合、index.phpの削除がなされないという動作になりました。
```sh
script_dir_path=$(dirname $(readlink -f $0))
echo ${script_dir_path}/../*
```
上記スクリプトのsh -xでの実行結果
```sh
+++ readlink -f kensyou/script/delete.sh
++ dirname /home/xxx/kensyou/script/delete.sh
+ script_dir_path=/root/kensyou/script
+ echo /home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
/home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
```
echoの内容としては、index.phpも含まれているため、
rm -rfの対象になりそうなのですが、実際にはindex.phpのみ削除がなされないという結果となりました。
rm -rfの対象になりそうなのですが、実際にはindex.phpのみ削除がなされないという結果となりました。
###推測
index.phpより先にscriptディレクトリの中身が削除されてしまったため、
index.phpの削除処理が走らなかった?(要検証)
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

7 検証の追記

sujico.net

sujico.net score 435

2018/11/19 18:15  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
【追加検証分】
→[index.php]
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
##検証
##追加検証
回答頂いた内容より、
rm -rfのパス指定のクォーテーションを外すことでパスが正しく解釈され、削除が動くようになりました。
しかし、[/home/xxx/kensyou/script/]の直下にファイル(仮にindex.phpなど)がある場合、index.phpの削除がなされないという動作になりました。
```sh
script_dir_path=$(dirname $(readlink -f $0))
echo ${script_dir_path}/../*
```
上記スクリプトのsh -xでの実行結果
```sh
+++ readlink -f kensyou/script/delete.sh
++ dirname /home/xxx/kensyou/script/delete.sh
+ script_dir_path=/root/kensyou/script
+ echo /home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
/home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
```
```
echoの内容としては、index.phpも含まれているため、
rm -rfの対象になりそうなのですが、実際にはindex.phpのみ削除がなされないという結果となりました。
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

6 追記

sujico.net

sujico.net score 435

2018/11/19 18:12  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
 
【追加検証分】  
→[index.php]  
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
##検証
回答頂いた内容より、
rm -rfのパス指定のクォーテーションを外すことでパスが正しく解釈され、削除が動くようになりました。
しかし、[/home/xxx/kensyou/script/]の直下にファイル(仮にindex.phpなど)がある場合、index.phpの削除がなされないという動作になりました。
```sh
script_dir_path=$(dirname $(readlink -f $0))
echo ${script_dir_path}/../*
```
上記スクリプトのsh -xでの実行結果
```sh
+++ readlink -f kensyou/script/delete.sh
++ dirname /home/xxx/kensyou/script/delete.sh
+ script_dir_path=/root/kensyou/script
+ echo /home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
/home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
```
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

5 追記

sujico.net

sujico.net score 435

2018/11/19 18:11  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
##検証
回答頂いた内容より、
rm -rfのパス指定のクォーテーションを外すことでパスが正しく解釈され、削除が動くようになりました。
しかし、[/home/xxx/kensyou/script/]の直下にファイル(仮にindex.phpなど)がある場合、index.phpの削除がなされないという動作になりました。
```sh  
script_dir_path=$(dirname $(readlink -f $0))  
echo ${script_dir_path}/../*  
```  
sh -xでの実行結果
上記スクリプトのsh -xでの実行結果
```html
```sh
+++ readlink -f kensyou/script/delete.sh
++ dirname /home/xxx/kensyou/script/delete.sh
+ script_dir_path=/root/kensyou/script
+ echo /home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
/home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
```
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

4 補足説明の追加

sujico.net

sujico.net score 435

2018/11/19 18:10  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
##検証
回答頂いた内容より、
rm -rfのパス指定のクォーテーションを外すことでパスが正しく解釈され、削除が動くようになりました。
しかし、[/home/xxx/kensyou/script/]の直下にファイル(仮にindex.phpなど)がある場合、index.phpの削除がなされないという動作になりました。
しかし、[/home/xxx/kensyou/script/]の直下にファイル(仮にindex.phpなど)がある場合、index.phpの削除がなされないという動作になりました。
sh -xでの実行結果
```html
+++ readlink -f kensyou/script/delete.sh
++ dirname /home/xxx/kensyou/script/delete.sh
+ script_dir_path=/root/kensyou/script
+ echo /home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
/home/xxx/kensyou/script/../01 /home/xxx/kensyou/script/../02 /home/xxx/kensyou/script/../03 /home/xxx/kensyou/script/../script /home/xxx/kensyou/script/../index.php
```
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

3 補足 追記

sujico.net

sujico.net score 435

2018/11/19 18:07  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
kensyouディレクトリ以下の全てが削除される筈だと思っていた
##検証
回答頂いた内容より、
rm -rfのパス指定のクォーテーションを外すことでパスが正しく解釈され、削除が動くようになりました。
しかし、[/home/xxx/kensyou/script/]の直下にファイル(仮にindex.phpなど)がある場合、index.phpの削除がなされないという動作になりました。
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

2 誤りの訂正

sujico.net

sujico.net score 435

2018/11/19 17:25  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../../*"
rm -rf "${script_dir_path}/../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../../*"」の部分をechoで見てみると、
しかし、「"${script_dir_path}/../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

1 追記

sujico.net

sujico.net score 435

2018/11/19 17:24  投稿

ディレクトリ内全てのディレクトリ、ファイルを自分自身を含めて削除するシェルスクリプトに関して
当方、Linuxでシェルスクリプトを書く初心者です。
Webサイトでシェルスクリプトの書き方を確認しながら勉強を進めている状態です。
##実現したいこと
以下のようなディレクトリ構成があります。
[/home/xxx/kensyou]
→[/01]
→→[/aaa.html]
→[/02]
→→[/bbb.html]
→[/03]
→→[/ccc.html]
→[/script]
→→[/delete.sh]
この[/home/xxx/kensyou/script/delete.sh]を実行した時、
/home/xxx/kensyou/以下のディレクトリ、ファイルを全て削除したいと考えています。
##困っていること
```sh
#自身の絶対パスを取得
script_dir_path=$(dirname $(readlink -f $0))
#自身のパスの1つ上 kensyouディレクトリ以下のディレクトリとファイルを全て削除
rm -rf "${script_dir_path}/../../*"
```
kensyouディレクトリ以下の全てを削除することを期待して、
上記のようなスクリプトを書きましたが、削除されたディレクトリ・ファイルはありませんでした。
しかし、「"${script_dir_path}/../../*"」の部分をechoで見てみると、
「/home/xxx/kensyou/script/../*」となる為、「rm -rf /home/xxx/kensyou/script/../*」コマンドになりそうなのに
何故削除されないのかが分かりません。
私が何を間違えているのか、
お詳しい方がいらっしゃれば何卒ご教示頂けますと幸いです。
お手数ですが、宜しくお願い致します。
お手数ですが、宜しくお願い致します。
##現在の想定
上記スクリプトにより、「rm -rf /home/xxx/kensyou/script/../*」というコマンドが発行されるので、
kensyouディレクトリ以下の全てが削除される筈だと思っていた
  • CentOS

    3840 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • sh

    424 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る