ファイルリストを除くすべてのアイテムを再帰的に削除するには?

ファイルリストを除くすべてのアイテムを再帰的に削除するには?

保持したい小さなファイルセットを除いて、ディレクトリ内のすべてをどのように繰り返し削除できますか?たとえば、f2名前付きファイルを除くすべてのファイルを削除しますf5

# Create a testing ground
mkdir -p d{1..3}
touch d{1..3}/f{1..5}

# Remove all files EXCEPT ones named f2 and f5.
find . -type f -not -name ('f2'|'f5') -type f -exec rm -f '{}' +

# Remove empty directories
find . -type d -empty -delete

生産:

bash: syntax error near unexpected token `('

究極の目標は、より大きなCユーザースペースアプリケーション内でこれを行うことですが、system()コマンドラインコマンドを使用する方が簡単です。

ベストアンサー1

find . -type f -not \( -name f2 -o -name f5 \) -delete

それは行わなければなりません。

-delete同じ-exec rm -f '{}' +ですが、より短く、より効率的です。ただし、実際に削除したいファイルのみをインポートすることを確認するには、まずそれを実行せずに実行してください。

おすすめ記事