web-dev-qa-db-ja.com

すべてのコンテンツを保持している親フォルダを削除します

親ディレクトリを削除しますが、その内容はすべて保持します。現在私のディレクトリ構造

$ /usermanagement/usermanagement/file1

親ディレクトリを削除した後、以下の構造のように見たい

$ /usermanagement/file1
3
Rakib

質問が正しく理解できなかったのかもしれません。しかし、私があなたの質問から集めたものの答えは、

現在のディレクトリにいるとします。名前はnestedで、親ディレクトリの名前はtestです。

$ cp -Rp . ../;cd ../;rm -rf nested

説明


  1. cp -Rp . ../-ディレクトリ、ネストされたディレクトリ、隠しファイルを含むすべてのファイルをコピーします。どこ、

    • -Rフラグは「ディレクトリを再帰的にコピーする」ために使用されます

    • -pは、「指定された属性(デフォルト:モード、所有者、タイムスタンプ)を保持します(可能な場合、追加の属性:コンテキスト、リンク、xattr、すべて)」、

    • .は、現在のディレクトリをソースとして示すためのものです

    • ..は、宛先としての親ディレクトリを示します。

  2. cd ../-現在のディレクトリから親ディレクトリに移動します

  3. rm -rf nested-これにより、ディレクトリ、ネストされたディレクトリ、および隠しファイルを含むすべてのファイルが削除されます。

出典:マニュアルページ

1
muhammad

(削除するディレクトリが現在の作業ディレクトリであると仮定)

zshの場合:

cd -P . &&
  mv -- *(D) .. &&
  cd -P .. &&
  rmdir ~-

bashの場合:

cd -P . &&
  (shopt -s dotglob && mv -- * ..) &&
  cd -P .. &&
  rmdir "$OLDPWD"

cd -P .は、現在の作業ディレクトリが$PWDはシンボリックリンクなしです。非表示のものも含めて、すべてのファイルとディレクトリを親に移動したい(したがって、(D)グロビングフラグとdotglobオプション)。

それで問題がなければ、現在のディレクトリを1レベル上に変更し、以前のディレクトリを削除します。

-iオプションをmvに追加すると、ファイルを上書きする移動をキャンセルすることができます)

6

上記よりも簡単な解決策は次のとおりです。

mv /usermanagement/usermanagement /usermanagement.tmp
rmdir /usermanagement
mv /usermanagement.tmp /usermanagement

つまり下のusermanagementディレクトリを一時的な名前でルートディレクトリに移動し、(現在は空の)上のusermanagementディレクトリを削除して、最後に/usermanagement.tmpディレクトリの名前を/usermanagementに変更します。 。

0
Johan Myréen

おそらく最も簡単な解決策:

$ mv /usermanagement/usermanagement/* /usermanagement/ && rmdir /usermanagement/usermanagement
0
Jaroslav Kucera