Linux でサブフォルダに基づいてフォルダを削除する方法

Linux でサブフォルダに基づいてフォルダを削除する方法

Linux 上でサブフォルダーの名前に基づいて一連のフォルダーを削除する必要があります。

/tmp/23245/Default
/tmp/34534/Default
/tmp/45435/Default
/tmp/65464/Main

/Default のサブフォルダを含む /tmp のすべてのフォルダを削除したい

これらのフォルダ

/tmp/23245/
/tmp/34534/
/tmp/45435/

次のコマンドでファイルを見つけることができます: find /tmp/*/Default

しかし、その出力から、フォルダ名/tmp/Foldernameを取得してrm -rfにパイプするにはどうすればよいでしょうか。

答え1

find を使用して次の操作を試すことができます。

find /tmp -mindepth 2 -maxdepth 2 -name "*Default*" -type d -printf "%h\n" | xargs rm -R

mindepth と maxdepth を使用して、/tmp から 2 レベル下のディレクトリを分析していることを確認し、%h を使用して先頭のディレクトリのみを出力します。出力を xargs rm -R にパイプして、先頭のディレクトリを削除します。

答え2

dirnameGNU coreutils には次のものがあります:

for i in /tmp/*/Default; do
  rm -R "$(dirname "$i")";
done

おそらく、別のアプローチもあるでしょうfind。私はその方法に詳しくないので、あなたや他の人に任せます。

編集: おそらくうまくrm -R "$(dirname /tmp/*/Default)"いくだろう

答え3

rm -d dirnameを試しましたか*?

rm -d /tmp/*/Default

このサイトからちょっと離れます:https://linuxize.com/post/rm-command-in-linux/

関連情報