2016-03-31 3 views
0

は私がパターンに一致いけない指定したフォルダ内のすべてのファイルを削除したい^transactions_[0-9]+再帰的に与えられたパターンに一致いけないフォルダ内のすべてのファイルを削除する方法

だが、私はフォルダ内のこれらのファイルがあるとしましょう

file_list 
transactions_010116.csv 
transactions_020116.csv 
transactions_check_010116.csv 
transactions_check_020116.csv 

私はtransactions_check_010116.csvtransactions_check_020116.csvを削除し、彼らは私が使用しようとしてきた^transactions_[0-9]+

を使用しているとして、最初の2を残したいと思いfind以下のようなものが、この表現は、フォルダパターンに一致いけないだけでなく、ファイル内のすべてを削除します。

私は正規表現が ^transactions_[0-9]+で始まるいけないフォルダ内のすべてのファイルを見つける使用している、ここで何をしようとしている
find /my_file_location -type f ! -regex '^transactions_[0-9]+' -delete 

それらを削除します。

答えて

1

を、あなたは完全な正規表現の使用を許可するように-Eオプションを使用する可能性があります。もう1つの問題は、-regexが、渡したディレクトリから始まるほぼ完全なパスを与えることです。

だから、正しいコマンドは次のようになります。

find -E /my_file_location ! -regex '.*/transactions_[0-9]+$' -type f -delete 

しかし、あなたが最初に確認する-printと同じを発行する必要があります...迅速な返信用

+0

あなたの返事をありがとう、残念ながら 'find:unknown predicate -E'' - findコマンドでregex式を使う別の方法はありますか?私は '/ my_file_location -regextype sedを見つけようとしました! -regex "。*/transactions_ [0-9] \ +" -type f -delete'これはパターンを見つけられなかったので、フォルダ内のすべてを削除しました。 –

+0

@SamGilbert:これはfind/my_file_location! -regex '。*/transactions_ [0-9] + $' -type f -print'あなたが削除したいファイルをリストしますか?そして、私はあなたが '-regextype'に渡すことができるものと同じ' find'を使っていませんでしたか? –

+0

ああ、私はそれを得ました、パターン ''。*/transactions_ [0-9] +。*' 'は必要なファイルを出力します!だから今それらを削除することができました、あなたの助けをありがとう –

1

のgrepが提供する正規表現一致しないすべてのものをgrep -vオプションがあります:あなたの実装に応じて

find . | grep -v '^transactions_[0-9]+' | xargs rm -f 
+0

おかげで、私はあなたが推奨される解決策をテストしてみました> 'find/my_file_location | grep -v 'transactions_ [0-9] \ +' | xargs rm -f' 私は '+'をエスケープしなければなりませんでしたが、それはほぼそこにあると思います。問題はディレクトリを削除しようとしていることだけです。ファイルを削除するように調整できますか? –

+0

もちろん、 'find -type f .'を使ってファイルだけを表示します –

+0

私はこれを試しました>' find -type f/my_file_location | grep -v 'transactions_ [0-9] \ +' | xargs rm -f'であるが、 'pathはエラーの前に置かなければならない 'というエラーは、ファイルパスが' grep:invalid - ' t''をもたらした後に置かなければならない。 –

関連する問題