パスの下に入れ子になったすべてのディレクトリを削除します。

パスの下に入れ子になったすべてのディレクトリを削除します。

次の条件を考えてみましょう。

  • いろいろあります入れ子になった多くのフォルダ/ファイルがインストールされました/mnt
    sdb      8:16   0   300G  0 disk
    ├─sdb1   8:17   0   256M  0 part /mnt/1/1
    ├─sdb2   8:18   0 199.7G  0 part /mnt/2
    └─sdb3   8:19   0   100G  0 part /mnt/3/1/2
    
  • /dev/sdbたとえば、どのデバイスがインストールされているかわからないとします/mnt(無人スクリプトで使用したいため)。
  • マウントディレクトリへのパスも不明です。
  • not mountedエラーが原因でプロセスを中断しないでください。

私が試した結果の説明は次のとおりです。

$ umount --all-targets --recursive /mnt; lsblk /dev/sdb
umount: /mnt: not mounted
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sdb      8:16   0   300G  0 disk
├─sdb1   8:17   0   256M  0 part /mnt/1/1
├─sdb2   8:18   0 199.7G  0 part /mnt/2
└─sdb3   8:19   0   100G  0 part /mnt/3/1/2

$ umount --all-targets --recursive /mnt/*/**; lsblk /dev/sdb
umount: /mnt/2/boot: not mounted
umount: /mnt/2/ostree: not mounted
umount: /mnt/3/1: not mounted
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sdb      8:16   0   300G  0 disk
├─sdb1   8:17   0   256M  0 part
├─sdb2   8:18   0 199.7G  0 part /mnt/2
└─sdb3   8:19   0   100G  0 part /mnt/3/1/2

$ umount --all-targets --recursive /mnt/*?; lsblk /dev/sdb
umount: /mnt/1: not mounted
umount: /mnt/3: not mounted
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sdb      8:16   0   300G  0 disk
├─sdb1   8:17   0   256M  0 part /mnt/1/1
├─sdb2   8:18   0 199.7G  0 part
└─sdb3   8:19   0   100G  0 part /mnt/3/1/2

$ umount --all-targets --recursive /mnt/*/**?; lsblk /dev/sdb
umount: /mnt/2/boot: not mounted
umount: /mnt/2/ostree: not mounted
umount: /mnt/3/1: not mounted
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sdb      8:16   0   300G  0 disk
├─sdb1   8:17   0   256M  0 part
├─sdb2   8:18   0 199.7G  0 part /mnt/2
└─sdb3   8:19   0   100G  0 part /mnt/3/1/2

追加のパッケージをインストールせずにこれを行うための良い方法はありますか?

ベストアンサー1

もっと良い方法があるか教えてください!

私は他の人を助けるために私の結果を投稿します。

  1. 好奇心から、私はこれがnot mountedエラーを引き起こさないので非常に役に立つと思いましたが、これはデバイス名が知られており、パーティション/ディスクセクションごとにマウントポイントがないか1つの場合にのみ機能します。(参考として追加するとインストールされ--all-targetsていないエラーが発生する可能性があるため、抑制するのは|| true悪い習慣です):

    $ umount /dev/sdb?*
    

    代わりに、パーティション/ディスクセクションごとに複数のマウントポイントを処理するために、ディスク上のすべてのマウントポイントを自動的にアンマウントする方法を考えました。

    $ lsblk --noheadings --output MOUNTPOINTS /dev/sdb | xargs -r umount
    
  2. しかし、元の質問の問題を解決するために、次のように考えました。

    $ umount $(df -h --output=target | grep /mnt)
    

    何かがインストールされている場合にのみ機能することがわかりました。ここでは、より正確な一致を提供し、インストールされている場合にのみ削除される拡張バージョンがあります。

    $ df -h --output=target | grep -w /mnt | xargs -r umount
    

    これはさらに調整できます。以前のバージョンでは、ディスクが複数の場所にマウントされている場合は、すべてのディレクトリを一覧表示できませんでした。別の方法で問題を解決してください。

    $ lsblk --output MOUNTPOINTS | grep -w /mnt | xargs -r umount
    

おすすめ記事