z / xy以外のすべてのxyのファイルのリストを取得するには?

z / xy以外のすべてのxyのファイルのリストを取得するには?

Settings.jsonこのコンピュータには多くのファイルがあります。

私はこれらすべての人のリストを得るために次の方法を使います。

find / -name "Settings.json" 2>&-

しかし、そのいくつかはにありますApi。たとえば、次のようになります。

/ClubApi/Settings.json
/CrmApi/Settings.json

属していない限り、すべて削除したいと思います。Api...そうすることはできません。

私は試した:

find / -name "Settings.json" 2>&- | xargs grep -v Api 

ただし、パスフィルタリングには機能しませんApi

どうすればいいですか?

ベストアンサー1

まず、このような習慣を持たないでください。閉鎖2>&-エラーを無視するには、標準エラーストリームを使用します。にリダイレクトする方が/dev/null安全です2>/dev/null。一部のコマンドは閉じたストリームに書き込みを試み、失敗すると終了します。

たとえば、参照してください。

{ echo 'error' >&2 && echo 'output'; } 2>&-

(何も出力しない)

{ echo 'error' >&2 && echo 'output'; } 2>/dev/null

(出力output)。


-path影響を与えないファイルを避けるためにテストを使用してください。

LC_ALL=C find / -type f ! -path '*Api/Settings.json' -name 'Settings.json' -print

または、*Api近くにいない場合は、次のディレクトリを完全に避けてください。

LC_ALL=C find / -name '*Api' -prune -o -type f -name 'Settings.json' -print

述語は-prune検索ツリーのブランチを「切り取り」(切り取り、削除)するため、上記のコマンドは名前が一致findするディレクトリには入りません*Api

-print-exec rm {} +実際にファイルを削除するには、上記のコマンドを変更してください。

おすすめ記事