GNU/Linux >> Linux の 問題 >  >> Linux

検索を使用して特定のディレクトリを検索し、1つのディレクトリを除くその中のすべてのファイルを削除しますか?

次の問題が発生しています。ディレクトリ構造があり、Cachesという名前のディレクトリ内にあるすべてのものを削除したい 。 Snapshotsという名前のすべてのディレクトリを除いてすべてを削除する必要があります 。 検索でこれを行う方法がわかりません または私が知っている他のコマンド。

私が尋ねる理由:iOSでは、すべてのアプリに独自のキャッシュディレクトリがあります。アプリによっては、これらが適切にクリアされない場合があります。この回答の解決策を使用すると、iOSでキャッシュをクリアできるため、デバイスのドライブが別のコンピューターにマウントされている場合に、ディスク容量を最適化できます。 FUSE(iExplorer)を使用します。

これは私がこれまでに持っているものです:

find . 2>/dev/null -type d -name "Caches" -maxdepth 3 -print

これは次のようなものを返します:

./Library/Caches

ls ./Library/Cachesを実行すると すべてのコンテンツとSnapshotsが表示されます 最終的に-deleteしたいので、除外したいディレクトリ これ以外はすべて。

このようなものが欲しい:

  Before:                            After:

  .                                  .
  ├── a                              ├── a
  │   ├── a                          │   ├── a
  │   └── Caches                     │   └── Caches
  │       ├── a                      │       └── a
  │       │   └── Snapshots          │           └── Snapshots
  │       │       └── a              │               └── a
  │       ├── b                      └── b
  │       │   └── a                      └── c
  │       └── c                  
  └── b
      ├── c
      └── Caches
          ├── a
          │   └── foo
          │       └── a
          └── b
              └── a

承認された回答:

find . -depth -print0 | perl -0lne '
  if ("$_/" =~ m{/Caches(/.*)}s && $1 !~ m{/Snapshots/}) {rmdir $_ or unlink $_}'

findの場合 -print0をサポートしていません 、-exec printf '%s\0' {} +に置き換えることができます 。

アイデアは、NULで終了するファイルのリストを印刷し(0はファイルパスで発生できない唯一のバイトであるため)、perlを使用することです。 の-n -0を使用 これらのファイル名ごとにいくつかのコードを実行するオプション($_を使用) ファイル名に設定します。

-depthを使用 、ファイルは親ディレクトリの前に印刷されます。ファイルまたはディレクトリのみを削除します(空であると想定しているため、depthでリストを処理することが重要です。 順序)パスに/Caches/が含まれている場合 /Snapshosts/が続かない 。


Linux
  1. 名前でファイルとディレクトリを削除します。そのようなファイル、又はディレクトリはありません?

  2. 特定のサイズを超えるファイルをすべて取得して削除する方法

  3. ディレクトリおよびサブディレクトリ内のすべてのゼロバイト ファイルを検索する

  1. すべてのサブディレクトリで一致するファイルを削除します

  2. Linux で 1 つのディレクトリを除くすべてのファイルのアクセス許可を変更できますか?

  3. ディレクトリ内の 1000 個を除くすべてのランダム ファイルを削除する

  1. ディレクトリとサブディレクトリ内のファイル数を見つける方法

  2. Linuxで特定の種類のファイルを検索してあるディレクトリから別のディレクトリにコピーする方法

  3. WcとPipingを使用して、特定のディレクトリにあるファイルとディレクトリの数を見つける方法は?