Aで始まり2つの数字で終わるファイルを削除しようとしましたが、何もしません。
私が試したもの:
rm ^A*[0..9]2$
私はどこが間違っていますか?
Aで始まり2つの数字で終わるファイルを削除しようとしましたが、何もしません。
私が試したもの:
rm ^A*[0..9]2$
私はどこが間違っていますか?
回答:
次のコマンドを使用して、条件に一致するすべてのファイルを削除できます。
ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm
使い方:
ls
すべてのファイルをリストします(結果がパイプされるため、1行ずつ)。
grep -P "^A.*[0-9]{2}$"
ファイルのリストをフィルタリングし、正規表現に一致するもののみを残します ^A.*[0-9]{2}$
.*
出現の任意の数を示し.
、.
ワイルドカードマッチング任意の文字です。
[0-9]{2}
は、の2つの出現[0-9]
、つまり任意の数字を正確に示します。
xargs -d"\n" rm
パイプさrm line
れるたびに1回実行line
されます。
私はどこが間違っていますか?
まずrm
、正規表現を引数として受け入れません。ワイルドカード*
に加えて、他のすべての文字は文字通り処理されます。
また、正規表現は少しずれています。例えば、*
任意の出現を意味する...
正規表現で、そうA*
試合A
、AA
等とも空の文字列が。
詳細については、Regular-Expressions.infoにアクセスしてください。
-d"\n
スイッチは、スペースの問題を修正します。
grep -P
(Perl正規表現)がありません。grep -E
この場合は動作する可能性があります。
-I
とxargs
最初に常に非致死コマンドでテストをし、:xargs -d"\n" -I {} echo "{}"
または使用find
:
find your-directory/ -name 'A*[0-9][0-9]' -delete
このソリューションは、奇妙なファイル名に対処します。
-type f
xargs
アプローチを使用できますrm -f
。
regexpを使用したソリューションは、コマンドを使用する前にどのファイルが削除されるかを確認でき、最終的なパイプを切断できる場合でも、200倍優れています。
ls | grep -P "^A.*[0-9]{2}$"
それが正しい場合は、次を使用してください:
ls | grep -P "^A.*[0-9]{2}$" | xargs -d "\n" rm
Unixで作業する場合、grepの使用方法を知ることが重要であるため、これは200倍優れています。使い方を知っていれば非常に強力です。